본문 바로가기

Github Action 을 이용한 CI 구축하기

github action을 이용하여 테스트 자동화, 커버리지 측정 설정을 이미지 위주로 설명하겠습니다.
이상한 부분 있으면 피드백 주시면 감사하겠습니다.

Github Action이란?

간단하게 말하면 Github Action은 Github에서 제공하는 CI/CD 도구입니다. 직접 서버를 호스팅하지 않아도 되며 제한적이지만 무료입니다. 또한 github repository에서 사용하므로 관리가 용이하다는 장점이 있습니다.

가격

github free는 매달 2,000분, 500Mb를 사용할 수 있어 토이 프로젝트에 사용하기 충분하며, 초과 사용량은 결제가 되지만 설정에서 제한할 수 있습니다. 기본적으로 $0로 제한되어 있습니다.

워크플로우 생성

오른쪽의 마켓플레이스는 다른 사람이 공개한 액션 목록입니다. 클릭하면 사용하는 방법을 확인할 수 있습니다.
액션은 워크플로우 안의 개별 태스크입니다. 직접 만들 수도 있고 마켓플레이스에 공유된 액션을 사용할 수도 있습니다. 공유된 액션을 사용하면 직접 구현하지 않고 편하게 이용할 수 있습니다. e.g. JDK 설정, AWS 설정 등이 있습니다.

워크플로우 설정

name: Java CI with Gradle

on: # Event
  push:
    branches: [ master ] 
  pull_request:
    branches: [ master, develop ]

jobs: 
  test: # Job id
    runs-on: ubuntu-latest # Runner
    steps:
    - uses: actions/checkout@v2 # Step
    - name: Set up JDK 11 
      uses: actions/setup-java@v1
      with:
        java-version: 11 
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew
    - name: Test with Gradle
      run: ./gradlew test

  • Event : 설정한 조건이 발생하면 워크플로우를 실행합니다. e.g. push, pull request, commit 등..
  • Runner : 워크플로우를 실행하는 운영체제 환경입니다. Github에서 호스팅하는 러너를 사용하거나 직접 생성한 러너를 호스팅 할 수 있습니다.
  • Step: commands 또는 actions를 실행할 수 있는 태스크입니다. action을 사용할 때는 uses 를 사용하고 commands를 사용할 때는 run 을 사용합니다.

현재 작성한 워크플로우는 아래와 같은 흐름으로 실행됩니다.

  • master에 push 또는 master, develop에 pull request 가 발생하면 ubuntu 환경에서 워크플로우 실행
  • Job이 Repository에 접근할 수 있게 actions/checkout@v2 액션 사용
  • JDK 11을 사용
  • gradle 에 실행 권한 부여
  • gradle을 이용하여 테스트 실행

실행 확인

github 설정

위처럼 CI가 실행 중이거나, 실패한 경우 merge가 되면 안 됩니다.
이러한 실수를 방지하기 위해서 github 에서 제공하는 설정을 이용합니다.

설정

Repository - Settings - Branches - Add rule

tip: develop과 master를 하나의 rule에서 함께 적용하고 싶으면 Branch name pattern에 [dm][ea][vs][!o]*를 입력하면 됩니다.

적용 후

워크플로우가 실행 중이거나 실패한 경우 Merge가 불가능합니다.
설정에는 관리자인 경우는 Merge할 수 있게 하거나 Master branch에는 push가 안 되게하는 등 다양한 설정이 있습니다.

커버리지 측정

테스트 커버리지 측정 도구는 jacoco를, 테스트 커버리지 관리는 Codecov를 사용하겠습니다.
Jacoco에 대한 자세한 설명은 - Gradle 프로젝트에 JaCoCo 설정하기

Gradle에 jacoco 추가

plugins {
    id 'jacoco'
}

jacoco {
    toolVersion = "0.8.5"
}

jacocoTestReport {
    reports {
        xml.enabled = true // codecov depends on xml format report
        html.enabled = true
    }
}

Codecov 적용

회원가입, 등록

https://codecov.io/signup로 들어가서 github 으로 회원가입 후 repository를 등록합니다.

github secrets에 Token 추가

워크플로우에 action 추가

Marketplace에 등록되어있는 Codecov의 action을 사용하겠습니다.

- name: Test with Gradle
  run: ./gradlew test
- name: Upload coverage to Codecov
  uses: codecov/codecov-action@v1
  with:
    token: ${{ secrets.CODECOV_TOKEN }}
    file: ./build/reports/jacoco/test/jacocoTestReport.xml

테스트를 돌리면 jacoco가 생선한 report를 codecov에 업로드하면 됩니다.
file 은 jacoco가 생성한 report의 경로이며 ./build/reports/jacoco/test/jacocoTestReport.xml는 jacoco의 기본 설정입니다.

확인

badge 추가

coverage badge

github action status badge

적용

마무리

여기까지 Github Action을 이용하여 CI 구축을 간단하게 해봤습니다.

'CI-CD' 카테고리의 다른 글

AWS Parameter store 사용하기  (0) 2020.05.24