Android CI/CD

원성희·2022년 5월 24일
0

Android

목록 보기
2/2

목표

  • CI/CD란 무엇인가?
  • Android 배포 시스템을 자동화한다.
  • Lint와 Detekt 적용해본다.
  • Firebase Distribution 적용

CI/CD 란 무엇인가?

체계가 잡히지 않은 업무 시스템에서 일을 하다보면 개발도 하고 버전관리 및 배포도 하는 경우가 많다. 효율성이 매우 떨어지게 되는데 이를 개선하기 위해 자동화가 필요하다. 빌드 및 배포를 자동화하는 업무 프로세스의 솔루션이라고 볼 수 있다.

CI ( Continuous Integration )

"지속적인 통합"이라는 의미로 수정 코드를 지속적으로 빌드 및 테스트 되는 Repository에 Merge되는 것을 의미한다.

  • 검증 프로세스 추가로 리소스 절약
  • 개발 편의성 및 효율성 증대
  • 형상 관리로 코드 품질 유지

CD ( Continuous Delivery )

"지속적인 제공" 이라는 의미로 지속적인 Deployment 즉 배포를 의미한다. CI에서 빌드되고 테스트 후에 자동으로 Product 환경으로 배포까지 한다.

  • 개발에 집중할 수 있도록 도와줌.
  • 빌드, 테스트, 배포까지 자동화 ( 효율화 )

Android CI/CD 환경 구성

그럼 실제로 개발 환경을 구성해보자. 여러가지 환경으로 잠깐 고민했지만 Github를 통해 구성해보도록 하려고 한다. 단계는 아래와 같다. 마지막 슬랙으로 알람까지 받도록 구성해보자. 물론 Bitbucket을 이용하여 pipeline을 이용한 방법도 있지만 유사한 방법이라 생략한다.

step1. GitHub 생성
step2. CI구성 : Action 설정 및 옵션 설정
step3. CD 구성 : 배포 및 슬랙 알림

Step1. Github Repository 생성

너무나 당연한것처럼 사용하고 있어서 자세한 설명은 생략하도록 하겠다. 브랜치는 main - release - develop 으로 구성해 준다. release 브랜치에 merge되면 CI/CD가 배포되도록 해본다.

Step2. CI 구성 (Github Action 설정)

상단 탭에 Actions라는 버튼을 클릭하면 프로젝트별 환경을 제공하고 있다.
workflows/파일명.yml 의 새로운 파일이 생성된다. Android CI를 이용하여 default 환경을 이용하여 빌드를 돌려본다. 물론 실제 환경에서는 Dev, QA, Stage, Prd 환경별로 구성하고 Signing와 난독화 등 많은 작업들이 추가된다. ㅠㅠ

name: Android CI

on:
  push:
    branches: [ release ]
  pull_request:
    branches: [ release ]

jobs:
  build:

    runs-on: ubuntu-latest

    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

아래와 같이 빌드가 정상적으로 돌아간 것을 확인 할 수 있다.

옵션. Ktlint와 Detekt 추가

코드의 품질을 높이기 위해 ktlint와 detekt도 아래와 같이 추가해 준다. 린트와 정적 분석기이다. 이를 하기 위해서는 프로젝트에 아래와 같이 추가한다.

공식 페이지 : https://ktlint.github.io/

plugins {
    id("org.jlleitschuh.gradle.ktlint") version Versions.BuildUtil.KtLint
}

allprojects {
    ...
    apply {
        plugin("org.jlleitschuh.gradle.ktlint")
    }
}

프로젝트에 위처럼 추가했다면 다시 yml 파일로 돌아와서 아래처럼 추가한다.

- name: Run ktlint
  run: ./gradlew ktlintCheck

- name: Run detekt
  run: ./gradlew detekt

step3. CD 구성 (배포 및 알림)

빌드는 끝이 났다. 자 그럼 실제 배포 환경을 구성해보자. 앱 배포는 FirebaseApp Distribution을 이용하여 알림은 slack을 통해 진행해본다.

- name: Upload apk to Firebase App Distribution
  uses: wzieba/Firebase-Distribution-Github-Action@v1
  with:
    appId: ${{ secrets.FIREBASE_APP_ID }}
    token: ${{ secrets.FIREBASE_TOKEN }}
    groups: runnerbe
    file: presentation/build/outputs/universal_apk/release/presentation-release-universal.apk
    releaseNotesFile: documents/release-note/default-note.txt

슬랙을 통한 알림은 아래와 같이 설정 가능하다.

   - name: action-slack
       uses: 8398a7/action-slack@v3
       with:
         status: ${{ job.status }}
         author_name: Sloth Backend - dev
         fields: repo,commit,message,author # action,eventName,ref,workflow,job,took 추가할 수 있음
         mention: here
         if_mention: failure,cancelled
       env:
         SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
       if: always() # Pick up events even if the job fails or is canceled.

참조 사이트

Github Actions 으로 안드로이드 CI/CD 구축하기
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

Slack 연동
https://velog.io/@sdb016/Github-actions%EC%99%80-slack-%EC%97%B0%EB%8F%99%ED%95%B4%EC%84%9C-%EC%95%8C%EB%A6%BC%EB%B0%9B%EA%B8%B0

profile
Simple is Best

0개의 댓글