[Android] Github Actions 를 통해 CI/CD를 구축해보자!

윤호이·2023년 11월 11일
0

CI/CD

목록 보기
1/1
post-thumbnail

서론

평소에도 CI/CD를 쓰긴하지만 이미 구축된 파이프라인을 사용하기 때문에
직접 깃허브 액션을 통해 구축해보고 싶었습니다.

CI/CD가 뭔데요?

  • CI(Continuous Integration) 지속적인 통합
  • CD(Continuous Deployment) 지속적인 배포

저희가 배포를 할때 어떤 프로세스를 거치는지 확인해보면

빌드 > 테스트 > 배포

이렇게 3단계를 거치게 됩니다.

그건 당연한거 아닌가요? 라고 생각하실 수 있습니다.

만약 배포하는데 시간이 많이 소요 되지않는다면 수동으로 해도 되지만

배포를 자주 해야하거나 배포 프로세스가 복잡해서 시간이 걸리는 경우

개발자가 일일히 하다가 실수라도 나면 머리 아프겠죠?

CI/CD를 통해서 빌드부터 테스트, 배포까지의 과정을 자동화 해둔다면

개발자는 개발에만 신경쓰면되고 배포 할땐 미리 구축해둔 CI/CD 파이프라인을 통해서

결과물을 받아서 배포할 수 있게 됩니다.

CI는 빌드 및 테스트 를 자동화
CD는 배포를 자동화

Github Actions 시작하기

먼저 CI/CD를 구축하고 싶은 레포지터리에 들어가서 메뉴를 보시면 Actions 란 탭이 있습니다.

들어가보시면

이런 화면이 나오는데 안드로이드는 어딨는거지??

Continuous integration 에서 view all을 누르면

Android CI Configure를 눌러줍시다!

그러면 해당 코드가 나올텐데
해당 코드의 형식은 YAML 입니다.
Flutter를 해보셨으면 익숙한 형식이지만
대부분은 익숙하지 않을 겁니다.
이참에 익숙해져봅시다!

코드 의미 분석하기

On

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

해당 코드는 master에 push 또는 PR 이벤트가 발생하면 CI/CD를 실행하도록
지정해줍니다.

Jobs

jobs:
  build:

Jobs는 실행할 작업을 정의합니다.

runs-on

 runs-on: ubuntu-latest

빌드 작업이 실행될 환경을 정의합니다. 여기서는 최신 버전의 Ubuntu 환경(Default)을 지정해줍니다.

steps

  steps:
    - uses: actions/checkout@v3
    - name: set up JDK 11
      uses: actions/setup-java@v3
      with:
        java-version: '11'
        distribution: 'temurin'
        cache: gradle

    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Build with Gradle
      run: ./gradlew build

작업이 실행될 순서를 정의합니다.

여기에서 실행하고 싶은 작업들을 나열해줍니다.

Hello World!!

    - name: hello world
      run: echo "Hello World!!"

아주 간단하게 하고 싶은 작업을 만들어 줬습니다.
뭐든 처음할땐 Hello World가 기본이죠?

해당 작업을 추가해준후

Commit changes...를 눌러줍시다.

커밋을 해주고 Actions 탭에 보시면 우리가 만든 CI/CD가 돌아가고 있는 것을
확인 할 수 있습니다.


(사진은 위의 코드와 다른 CI 입니다.)

저는 자바 17을 사용하기 때문에 자바 17로 설정해줬습니다.

아마 여러분도 헬로월드 정도는 아주 잘 찍힐겁니다.

CI/CD 구축

시나리오에 따라 CI/CD를 구축해보겠습니다.

CI
1. 배포할땐 master 브랜치를 통해 배포 할거니까 master에 대해서만 이벤트를 받을래!
2. CI/CD는 우분투 최신환경에서 돌려야지
3. 자바 버전은 17을 쓸래
4. 빌드전에 클린을 먼저 하고싶어
5. 코드가 공식 컨벤션에 틀린게 없는지 검사하고 싶어
6. 작성된 Unit Test를 실행해서 검사하고 싶어
7. 작성된 Android Test를 실행해서 검사하고 싶어

CD
1. 전체 빌드하는건 너무 오래걸리니까 적당히 apk만 뽑고싶어
2. debug apk를 업로드해서 다운받고싶어
3. release apk를 업로드해서 다운받고싶어

해당 시나리오를 코드로 나타냈습니다.

name: Android CI

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'
        cache: gradle

    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Clean Bulid
      run: ./gradlew clean
    - name: Run ktlint
      run: ./gradlew ktlintCheck
    - name: Run Unit Test
      run: ./gradlew test
      
    - name: Run Android Test
      uses: reactivecircus/android-emulator-runner@v2
      with:
       api-level: 24
       target: default
       arch: x86
       profile: Nexus 6
       script: ./gradlew connectedCheck --stacktrace
       run: ./gradlew connectedAndroidTest
       
    - name: Assemble
      run: ./gradlew assemble
      
    - name: Upload Debug APK
      uses: actions/upload-artifact@v3
      with:
       name: debug
       path: ./app/build/outputs/apk/debug/app-debug.apk

    - name: Upload Release APK
      uses: actions/upload-artifact@v3
      with:
       name: release
       path: ./app/build/outputs/apk/release/app-release-unsigned.apk

사실 위 코드를 보면 그냥 step 뒤에 작업을 하나하나 추가해준게 끝이죠?

    - name: task name
      run: ./gradlew some command name

실행 결과

성공적으로 잘 빌드되었네요

빌드의 결과물인 apk도 잘 다운되네요

하고 싶은 말

자주하는 단순 프로세스를 자동화 해두면
귀찮은 일이 줄어드니 개발에 집중 할 수 있게 됩니다.

경량화된 CI/CD인 Github Actions 같이 맛보시죠 ^^

기본적으로 CI/CD는 입문이 조금 어렵고 기본적으로 배포를 고려한
프로세스이니 아직 학생이시거나 안드로이드 초보다 싶으면
일단 CI/CD는 보류 해두시고 어느정도 가닥이 잡히고 배포를 편하게
하고 싶을 때 시작하는 것을 추천드립니다.

감사합니다.

참조

https://velog.io/@ricky_0_k/Github-Actions-%EC%9C%BC%EB%A1%9C-Android-CICD-%EA%B5%AC%EC%B6%95%ED%95%9C-%EC%8D%B0-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0-1.%EA%B0%9C%EB%85%90

https://sungbin.land/github-actions-%EC%9C%BC%EB%A1%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ci-cd-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-1aaaa6595c4a

profile
열정은 내 삶의 방식, 꾸준함은 내 삶의 증명

1개의 댓글

comment-user-thumbnail
2024년 1월 20일

Android ci yml에서 cd도 같이 하시는건가요?

답글 달기