[CI/CD] Gitlab-ci.yml 작성 예제 - Jacoco
이번엔 Jacoco.
Jacoco또한 Java 테스팅 툴로, 앞서 작성한 JUnit의 테스트 코드를 그대로 사용하게 됨
해당 코드를 이용해서 전체 프로그램, 클래스의 커버리지(Coverage) 테스트를 진행할 수 있음
JUnit과 마찬가지로, Gradle 셋팅부터 시작
plugins {
id 'java'
id 'application'
id 'jacoco' // 해당 내용 추가
}
jacoco {
toolVersion = 'Jacoco의 버전'
}
jacocoTestReport {
reports {
// xml.enabled = true // 설정에 따라 xml 혹은 csv로 레포트를 받을 수 있음
csv.enabled // 여기서는 csv로 결과를 받기로 함. 추후 있을 gitlab-ci를 위해
// xml.destination file("${buildDir}/jacocoCsv")
csv.destination file("${buildDir}/jacocoCsv") // 레포트 생성 경로 지정
}
}
// 하단의 내용을 통해 커버리지 테스트를 설정
jacocoTestCoverageVerification {
violationRules {
rule {
element = 'METHOD' // 커버리지 체크의 단위. CLASS, METHOD 등의 단위로 체크
limit {
counter = 'BRANCH' // 커버리지 측정 시 퍼센테이지의 기준을 정함. LINE, INSTRUCTION, BRANCH 등
value = 'COVEREDRATIO' // 결과를 나타내는 방식을 지정. TOTALCOUNT, COVEREDRATIO 등
minimum = 0.5 // 테스트 통과 기준. 여기서는 코드가 커버된 비율(COVEREDRATIO)이 기준이므로 0~1 사이의 값
}
}
rule { // rule은 여러개일 수 있음.
element = 'METHOD' // 다음으로 체크할 룰을 정의
limit {
counter = 'LINE' // 이번 기준은 LINE
value = 'TOTALCOUNT' // 전체 몇 줄 이상의 라인이 실행되었는지
minimum = 20 // 20줄.
}
}
}
}
test { // test라는 작업을 실행하면 JacocoTestReport가 순차적으로 진행되도록 설정.
finalizedBy("jacocoTestReport")
}
jacocoTestReport { // 마찬가지로, JacocoTestReport가 완료되면 순차적으로 실행될 업무를 설정.
finalizedBy("jacocoTestCoverageVerification")
}
이후, 테스트는 앞선 JUnit과 마찬가지로 gradle check/test jacocoTestReport 라는 명령어로 수행이 가능함.
이 테스트를 gitlab-ci.yml에 적용하기
Jacoco는 gitlab에서 별도로 플러그인을 제공하지는 않는 것으로 보임.
이에, 별도의 레포트를 직접 생성하고 export하여 볼 수 있도록 해야 함!
image: gradle:latest
stages:
- coverage_test
coverage_test:
stage: test
script:
- gradle check jacocoTestReport // gradle을 이용한 테스트 진행 및 결과 리포트 생성
- awk -F"," '{ instructions += $4 + $5; covered += $5 } END { print covered, "/", instructions, " instructions covered"; print 100*covered/instructions, "% covered" }' build/jacocoCsv // 생성된 리포트를 파싱하여 gitlab상에서 확인할 수 있도록 적용
tags:
- ci
매우 간단함. gradle check 명령어로 테스트를 수행하면, 앞선 설정으로 인해 특정 경로에 csv 파일이 생성 됨
이 를 awk로 읽어와서 커버리지만 출력하도록 하는 것.
위와 같이 작성하면 하단의 그림처럼 테스트 결과 우측에 커버리지 퍼센트를 볼 수 있음.
만약 커버리지의 기준을 못넘었다면 Fail로 뜨게 됨.
추가로, 이러한 테스트 내용을 gitlab에 뱃지로 표시할 수 있음
https://docs.gitlab.com/ee/ci/pipelines/settings.html#pipeline-badges
Customize pipeline configuration | GitLab
Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner.
docs.gitlab.com
Readme.md 파일에 아래와같이 결과를 출력할 수 있음.