티스토리 뷰

혹시 CI/CD 파이프라인이라는 말을 들어 보였나요?
프로젝트 규모가 커지고 여러 명이 함께 개발하다 보면 코드를 리뷰하고 병합하는 일이 자주 발생합니다.
이때 사람이 직접 모든 코드를 확인하다 보면 실수로 빌드가 깨지는 코드가 병합될 수도 있어요.
그래서 빌드나 테스트처럼 반복적으로 확인해야 하는 작업은 자동화해 두는 것이 좋습니다.
이번 글에서는 GitHub Actions를 사용해서 Android 프로젝트에 간단한 CI를 적용하는 방법을 알아보려고 합니다.
CI(Continuous Integration)
CI는 여러 개발자가 작성한 코드를 자주 병합하고, 그 코드가 정상적으로 빌드되는지 자동으로 확인하는 개발 방식입니다.
예를 들어 PR을 올릴 때마다 자동으로 빌드가 실행된다면 리뷰어는 "이 코드가 최소한 빌드는 되는 상태인지" 먼저 확인할 수 있습니다.
즉, CI는 사람이 놓칠 수 있는 기본적인 검증 과정을 자동으로 실행해 주는 역할을 합니다.
Github Actions란?
GitHub Actions는 GitHub에서 제공하는 자동화 기능입니다.
저장소에 특정 이벤트가 발생했을 때 미리 정의해 둔 작업을 자동으로 실행할 수 있습니다.
예를 들어 아래와 같은 상황에서 사용할 수 있어요.
- main 브랜치에 push 되었을 때 빌드 실행
- PR이 생성되었을 때 테스트 실행
- 릴리즈 태그가 생성되었을 때 배포 실행
CI 뿐만 아니라 CD, 테스트 자동화, 릴리즈 자동화 등에도 활용할 수 있습니다.
GitHub 저장소 안에 workflow 파일을 추가하면 GitHub Actions가 해당 파일을 읽고 자동으로 작업을 실행합니다.
GitHub Actions 요금
GitHub Actions는 공개 저장소에서는 기본적으로 무료로 사용할 수 있습니다.
비공개 저장소의 경우 계정 플랜에 따라 무료 제공량이 있고, 그 범위를 초과하면 과금될 수 있습니다.
GitHub Free 기준으로는 비공개 저장소에서 월 2,000분의 실행 시간과 500MB의 artifact 저장 공간이 제공됩니다.
간단한 개인 프로젝트나 사이드 프로젝트에서는 크게 부담 없이 사용할 수 있지만, 빌드 시간이 길거나 workflow가 자주 실행되는 프로젝트라면 사용량을 확인해 보는 것이 좋습니다.
WorkFlow 파일 만들기
GitHub Actions를 사용하려면 저장소에 아래 경로로 workflow 파일을 추가해야 합니다.
.github/workflows/android-ci.yml
.github/workflows 폴더 안에 .yml 또는 .yaml 파일을 GitHub Actions가 workflow 파일로 인식합니다.
Android 프로젝트에서 사용할 수 있는 간단한 CI 예시는 다음과 같습니다.
name: Android CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
이 파일을 저장소에 추가하고 push 하면 main 또는 develop 브랜치에 push가 발생하거나 PR이 생성될 때 자동으로 빌드가 생성됩니다.
Workflow 구조 살펴보기
위 코드에서 중요한 부분을 하나씩 살펴보겠습니다.
name
name: Android CI
name은 workflow의 이름입니다.
GitHub 저장소의 Actions 탭에서 이 이름으로 표시됩니다.
on
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
on은 workflow가 언제 실행될지 정의하는 부분입니다.
위 예시에서는 main, develop 브랜치에 push가 발생하거나, 해당 브랜치를 대상으로 PR이 생성되었을 때 workflow가 실행됩니다.
만약 모든 브랜치의 push에서 실행하고 싶다면 아래처럼 작성할 수도 있습니다.
on: push
push와 pull request 모두에서 실행하고 싶다면 이렇게 작성할 수도 있습니다.
on: [push, pull_request]
jobs
jobs:
build:
runs-on: ubuntu-latest
jobs는 workflow 안에서 실행할 작업들을 정의하는 부분입니다.
위 예시에서는 build라는 job을 하나 만들었습니다. runs-on은 이 job이 어떤 환경에서 실행될지 정하는 옵션입니다. Android 빌드는 보통 Ubuntu 환경에서 많이 실행하기 때문에 ubuntu-latest를 사용했습니다.
steps
steps:
- name: Checkout repository
uses: actions/checkout@v4
steps는 job 안에서 실제로 실행되는 단계입니다.
actions/checkout@v4는 GitHub Actions 실행 환경에 현재 저장소 코드를 가져오는 역할을 합니다.
Set up JDK
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
Android 프로젝트를 빌드하려면 JDK가 필요합니다.
최근 Android Gradle Plugin을 사용하는 프로젝트라면 JDK 17을 사용하는 경우가 많기 때문에 예시에서는 Java 17로 설정했습니다.
build
- name: Build with Gradle
run: ./gradlew build
마지막으로 Gradle 명령어를 실행해서 프로젝트가 정상적으로 빌드되는지 확인합니다.
프로젝트에 따라 아래처럼 원하는 명령어로 바꿔 사용할 수도 있습니다.
run: ./gradlew test
GitHub에서 직접 만들기


직접 파일을 만드는 방법도 있지만, GitHub 저장소의 Actions 탭에서 템플릿을 선택해 만들 수도 있습니다.
저장소로 이동한 뒤 Actions 탭을 누르면 언어나 플랫폼에 맞는 workflow 템플릿을 추천해 줍니다.
Android 프로젝트라면 Android 관련 템플릿을 선택한 뒤, 프로젝트 상황에 맞게 내용을 조금 수정해서 사용할 수 있습니다.
처음 GitHub Actions를 사용한다면 템플릿으로 시작한 뒤 하나씩 수정해 보는 것도 좋은 방법입니다.
정리하며
이번 글에서는 GitHub Actions를 사용해서 Android 프로젝트에 CI를 적용하는 방법을 알아보았습니다.
CI를 설정해 두면 push나 PR이 발생할 때마다 자동으로 빌드가 실행되기 때문에 문제를 더 빠르게 발견할 수 있습니다.
설정 자체는 .github/workflows 폴더에 workflow 파일을 추가하는 것으로 시작할 수 있어요.
처음에는 조금 낯설 수 있지만, 한 번 적용해 두면 협업할 때 꽤 든든한 자동화 도구가 되어줄 것 같습니다 :)
참고
'GIT' 카테고리의 다른 글
| [Git] 원격 저장소에서 지워진 브랜치, 로컬 브랜치에서도 지우기 (0) | 2023.02.13 |
|---|---|
| [GIT] GitHub PR, Issue 템플릿으로 협업 규칙 만들기 (0) | 2021.02.15 |
| [GIT] 내 Github 프로필, 오늘 몇 명이나 왔을까? (MyHits 라이브러리) (5) | 2021.02.12 |
| [GIT] "Password 인증은 이제 안녕!" Github 토큰 인증(PAT) 완벽 가이드 (1) | 2021.01.22 |
| [GIT] 나도 이제 컨트리뷰터! 깃허브 오픈소수 기여 가이드 (PR부터 동기화까지) (2) | 2020.08.28 |
- Total
- Today
- Yesterday
- Kotlin
- Player Animator
- Top Down
- 백준
- AOS
- compose
- git
- WebView
- deep link
- android
- Scean
- Coroutine
- Unity
- ViewModel
- 안드로이드
- Animation
- 유니티
- github
- google io 2025
- 기술질문
- Java
- build
- Tutorial
- 2d
- fragment
- Gradle
- Test
- View
- recyclerview
- CI/CD
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
