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 |
---|