JaCoCo 커버리지 리포트
Status: Beta
- 소개됨 GitLab 17.3에서
jacoco_coverage_reports
라는 플래그와 함께입니다. 기본적으로 비활성화되어 있습니다.
이 기능의 사용 가능성은 기능 플래그에 의해 제어됩니다.
자세한 내용은 기록을 참조하십시오.
이 기능은 테스트용으로 제공되지만 생산 환경에서 사용할 준비가 되어 있지 않습니다.
JaCoCo 커버리지 리포트를 사용하려면 제대로 형식화된 JaCoCo XML 파일을 생성해야 합니다.
이 파일은 라인 커버리지를 제공합니다.
JaCoCo 커버리지 리포트 시각화는 다음을 지원합니다:
-
명령 (C0 커버리지),
리포트에서ci
(커버된 명령)입니다.
이 기능은 베타 상태입니다. 의견이 있으시면,
피드백 이슈를 사용하여 자세한 내용을 제공하십시오.
JaCoCo 커버리지 작업 추가
파이프라인을 구성하여 커버리지 리포트를 생성하려면, .gitlab-ci.yml
파일에 작업을 추가하십시오. 예를 들어:
아래는 예시 구성입니다:
test-jdk11:
stage: test
image: maven:3.6.3-jdk-11
script:
- mvn $MAVEN_CLI_OPTS clean org.jacoco:jacoco-maven-plugin:prepare-agent test jacoco:report
artifacts:
reports:
coverage_report:
coverage_format: jacoco
path: target/site/jacoco/jacoco.xml
이 예제에서 mvn
명령은 JaCoCo 커버리지 리포트를 생성합니다. path
는 생성된 리포트를 가리킵니다.
작업이 여러 리포트를 생성하는 경우, 아티팩트 경로에 와일드카드를 사용하세요
상대 파일 경로 수정
파일 경로 변환
JaCoCo 리포트는 상대 파일 경로를 제공하지만 커버리지 리포트 시각화는 절대 경로를 요구합니다.
GitLab은 관련 머지 요청의 데이터를 사용하여 상대 경로를 절대 경로로 변환하려고 시도합니다.
경로 일치 프로세스는 다음과 같습니다:
- 동일한 파이프라인 참조에 대한 모든 머지 요청을 찾습니다.
- 변경된 모든 파일에 대해 모든 절대 경로를 찾습니다.
- 리포트의 각 상대 경로에 대해 첫 번째 일치하는 절대 경로를 사용합니다.
이 과정은 항상 적절한 일치하는 절대 경로를 찾을 수 있는 것은 아닙니다.
여러 모듈 또는 소스 디렉토리
여러 모듈 또는 소스 디렉토리에 대해 파일 이름이 동일한 경우, 기본적으로 절대 경로를 찾는 것이 불가능할 수 있습니다.
예를 들어, GitLab은 머지 요청에서 다음과 같은 파일이 변경되었을 경우 절대 경로를 찾을 수 없습니다:
src/main/java/org/acme/DemoExample.java
src/main/other-module/org/acme/DemoExample.java
경로 변환이 성공하려면, 상대 경로에 고유한 차이가 있어야 합니다.
예를 들어, 파일 또는 디렉토리 이름 중 하나를 변경할 수 있습니다:
-
파일 이름 변경:
src/main/java/org/acme/DemoExample.java - src/main/other-module/org/acme/DemoExample.java + src/main/other-module/org/acme/OtherDemoExample.java
-
경로 변경:
src/main/java/org/acme/DemoExample.java - src/main/other-module/org/acme/DemoExample.java + src/main/other-module/org/other-acme/DemoExample.java
전체 상대 경로가 고유한 한 새로운 디렉토리를 추가할 수도 있습니다.
문제 해결
모든 변경된 파일에 대한 메트릭이 표시되지 않음
같은 소스 브랜치에서 새로운 대상 브랜치를 사용하여 새로운 병합 요청을 생성하면 메트릭이 올바르게 표시되지 않을 수 있습니다.
작업은 새로운 병합 요청의 차이를 고려하지 않으며 다른 병합 요청의 차이에 포함되지 않은 파일에 대한 메트릭을 표시하지 않습니다. 이는 생성된 커버리지 보고서에 지정된 파일에 대한 메트릭이 포함되어 있을 때에도 발생합니다.
이 문제를 해결하려면 새로운 병합 요청이 생성될 때까지 기다린 다음 파이프라인을 다시 실행하거나 새로 시작하세요. 그러면 새로운 병합 요청이 반영됩니다.