CI/CD 아티팩트 리포트 유형
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
artifacts:reports를 사용하면 다음을 수행할 수 있습니다. artifacts: reports 용으로 생성된 아티팩트는 job 결과(성공 또는 실패)와 관계없이 항상 업로드됩니다. 보안 리포트 유형(sarif, sast, dast, container_scanning, dependency_scanning, secret_detection, api_fuzzing, coverage_fuzzing)의 경우 아티팩트는 항상 업로드되지만 결과는 이를 생...
artifacts:reports를 사용하면 다음을 수행할 수 있습니다.
- 포함된 템플릿이 job에서 생성하는 테스트 리포트, 코드 품질 리포트, 보안 리포트, 기타 아티팩트를 수집합니다.
- 이러한 리포트 중 일부는 다음 위치에 정보를 표시하는 데 사용됩니다.
- 머지 리퀘스트.
- 파이프라인 보기.
- 보안 대시보드.
artifacts: reports 용으로 생성된 아티팩트는 job 결과(성공 또는 실패)와 관계없이 항상 업로드됩니다.
보안 리포트 유형(sarif, sast, dast, container_scanning,
dependency_scanning, secret_detection, api_fuzzing, coverage_fuzzing)의 경우
아티팩트는 항상 업로드되지만 결과는 이를 생성한 job이 성공한 경우에만 수집됩니다.
allow_failure: true가 설정된 job을 포함해 실패한 job은
수집되는 결과를 생성하지 않습니다. 자세한 내용은
스캐너 종료 코드를 참고합니다.
artifacts:expire_in을 사용하면 아티팩트의 만료 시간을 설정할 수 있으며,
이는 인스턴스의 기본 설정을 재정의합니다.
GitLab.com은 기본 아티팩트 만료 값이 다를 수 있습니다.
일부 artifacts:reports 유형은 동일한 파이프라인의 여러 job에서 생성될 수 있으며, 각 job의 머지 리퀘스트 또는
파이프라인 기능에서 사용됩니다.
리포트 출력 파일을 탐색하려면 job 정의에 artifacts:paths 키워드를 반드시 포함해야 합니다.
하위 파이프라인의 아티팩트를 사용하는 상위 파이프라인의 통합 리포트는 지원되지 않습니다. 이 기능 지원은 에픽 8205에서 제안되었습니다.
artifacts:reports:accessibility#
accessibility 리포트는 pa11y를 사용해 머지 리퀘스트에서 도입된 변경 사항의
접근성 영향을 리포트합니다.
GitLab은 하나 이상의 리포트 결과를 머지 리퀘스트의 접근성 위젯에 표시할 수 있습니다.
자세한 내용은 접근성 테스트를 참고합니다.
artifacts:reports:annotations#
annotations 리포트는 job에 보조 데이터를 첨부하는 데 사용됩니다.
annotations 리포트는 annotation 섹션이 있는 JSON 파일입니다. 각 annotation 섹션은 원하는 이름을 가질 수 있으며, 동일하거나 서로 다른 유형의 annotation을 원하는 개수만큼 가질 수 있습니다.
리포트 경로가 둘 이상의 파일과 일치하면 섹션 이름은 일치하는 모든 파일에서 고유해야 합니다. 두 파일에 이름이 같은 섹션이 있으면 아티팩트 업로드가 실패합니다.
각 annotation은 하나의 키(annotation 유형)로 구성되며, 해당 annotation의 데이터가 담긴 하위 키를 포함합니다.
Annotation 유형#
external_link#
external_link annotation을 job에 첨부하면 job 출력 페이지에 링크를 추가할 수 있습니다.
external_link annotation의 값은 다음 키를 가진 객체입니다.
| 키 | 설명 |
|---|---|
label |
링크와 연결된, 사람이 읽을 수 있는 레이블입니다. |
url |
링크가 가리키는 URL 입니다. |
예시 리포트#
다음은 job annotations 리포트의 예시입니다:
{
"my_annotation_section_1": [
{
"external_link": {
"label": "URL 1",
"url": "https://url1.example.com/"
}
},
{
"external_link": {
"label": "URL 2",
"url": "https://url2.example.com/"
}
}
]
}
artifacts:reports:api_fuzzing#
api_fuzzing 리포트는 API 퍼징 버그를
아티팩트로 수집합니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 머지 리퀘스트의 보안 스캔 리포트.
- 프로젝트 취약점 리포트.
- 파이프라인의 Security 탭.
- 보안 대시보드.
artifacts:reports:browser_performance#
browser_performance 리포트는 브라우저 성능 테스트 지표를 아티팩트로 수집합니다.
이 아티팩트는 sitespeed.io 용 GitLab 플러그인이
생성하는 JSON 파일입니다.
GitLab은 결과를 머지 리퀘스트에 표시합니다. 자세한 내용은 브라우저 성능 테스트를 참고합니다.
GitLab은 여러 browser_performance 리포트의 통합 결과는 표시할 수 없습니다.
artifacts:reports:coverage_report#
coverage_report를 사용해 Cobertura 또는 JaCoCo 형식의 커버리지 리포트를 수집합니다.
파이프라인이 완료되면 GitLab은 리포트를 파싱해 머지 리퀘스트 diff에
줄 단위 커버리지 주석을 표시합니다.
이 키워드는 diff 주석만 생성합니다. MR 위젯에 커버리지 비율을 표시하거나
커버리지 이력 그래프를 채우지는 않습니다. 커버리지 비율을 표시하려면
coverage 키워드를 별도로 구성합니다.
자세한 내용은 다음을 참고합니다.
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
와일드카드를 사용해 여러 리포트를 생성하고 수집할 수 있습니다. GitLab은 결과를 하나의 리포트로 병합합니다.
하위 파이프라인의 커버리지 리포트는 머지 리퀘스트 diff 주석에 표시되지만, 상위 파이프라인과는 공유되지 않습니다.
artifacts:reports:codequality#
codequality 리포트는 코드 품질 이슈를 수집합니다.
수집된 코드 품질 리포트는 아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
artifacts:expire_in 값은 1 week로 설정됩니다.
artifacts:reports:container_scanning#
container_scanning 리포트는 컨테이너 스캐닝 취약점을
수집합니다. 수집된 컨테이너 스캐닝 리포트는 아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 머지 리퀘스트의 컨테이너 스캐닝 위젯.
- 파이프라인의 Security 탭.
- 보안 대시보드.
- 프로젝트 취약점 리포트.
artifacts:reports:coverage_fuzzing#
coverage_fuzzing 리포트는 커버리지 퍼징 버그를
수집합니다. 수집된 커버리지 퍼징 리포트는 아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 머지 리퀘스트의 보안 스캔 리포트.
- 파이프라인의 Security 탭.
- 프로젝트 취약점 리포트.
- 보안 대시보드.
artifacts:reports:cyclonedx#
이 리포트는 CycloneDX 프로토콜 형식을 따라 프로젝트의 구성 요소를 설명하는 소프트웨어 자재 명세서(Software Bill of Materials)입니다.
job 당 여러 개의 CycloneDX 리포트를 지정할 수 있습니다. 파일명 목록, 파일명 패턴, 또는 두 가지를 함께 제공할 수 있습니다.
- 파일명 패턴 (
cyclonedx: gl-sbom-*.json,junit: test-results/**/*.json). - 파일명 배열 (
cyclonedx: [gl-sbom-npm-npm.cdx.json, gl-sbom-bundler-gem.cdx.json]). - 두 방식의 조합 (
cyclonedx: [gl-sbom-*.json, my-cyclonedx.json]). - 디렉터리는 지원되지 않습니다 (
cyclonedx: test-results,cyclonedx: test-results/**).
다음 예시는 CycloneDX 아티팩트를 노출하는 job을 보여줍니다.
artifacts:
reports:
cyclonedx:
- gl-sbom-npm-npm.cdx.json
- gl-sbom-bundler-gem.cdx.json
artifacts:reports:dast#
dast 리포트는 DAST 취약점을 수집합니다.
수집된 DAST 리포트는 아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 머지 리퀘스트의 보안 스캔 리포트.
- 파이프라인의 Security 탭.
- 프로젝트 취약점 리포트.
- 보안 대시보드.
artifacts:reports:dependency_scanning#
dependency_scanning 리포트는 의존성 스캐닝 취약점을
수집합니다. 수집된 의존성 스캐닝 리포트는 아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 머지 리퀘스트의 의존성 스캐닝 위젯.
- 파이프라인의 Security 탭.
- 보안 대시보드.
- 프로젝트 취약점 리포트.
- 의존성 목록.
artifacts:reports:dotenv#
dotenv 리포트는 파일에서 환경 변수를 수집해, 파이프라인의 이후 job에서
CI/CD 변수로 사용할 수 있게 합니다.
자세한 내용은 dotenv 변수를 참고합니다.
artifacts:reports:junit#
junit 리포트는 JUnit 리포트 형식 XML 파일을
수집합니다. 수집된 단위 테스트 리포트는 아티팩트로 GitLab에 업로드됩니다. JUnit은 원래 Java로 개발됐지만,
JavaScript, Python, Ruby 등 다른 언어를 위한 서드파티 포트도 다수 존재합니다.
자세한 내용과 예시는 단위 테스트 리포트를 참고합니다. 다음 예시는 Ruby RSpec 테스트에서 JUnit XML 리포트를 수집하는 방법을 보여줍니다.
rspec:
stage: test
script:
- bundle install
- rspec --format RspecJunitFormatter --out rspec.xml
artifacts:
reports:
junit: rspec.xml
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
일부 JUnit 도구는 여러 XML 파일로 내보냅니다. 하나의 job에서 여러 테스트 리포트 경로를 지정해 하나의 파일로 연결할 수 있습니다. 다음 중 하나를 사용합니다.
- 파일명 패턴 (
junit: rspec-*.xml,junit: test-results/**/*.xml). - 파일명 배열 (
junit: [rspec-1.xml, rspec-2.xml, rspec-3.xml]). - 두 방식의 조합 (
junit: [rspec.xml, test-results/TEST-*.xml]). - 디렉터리는 지원되지 않습니다 (
junit: test-results,junit: test-results/**).
artifacts:reports:load_performance#
load_performance 리포트는 부하 성능 테스트 지표를
수집해 아티팩트로 업로드합니다.
결과는 머지 리퀘스트의
부하 테스트 위젯에 표시됩니다.
여러 load_performance 리포트의 통합 결과는 지원되지 않습니다.
artifacts:reports:metrics#
metrics 리포트는 지표를 수집합니다. 수집된 지표 리포트는
아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 머지 리퀘스트의 지표 리포트 위젯에 표시할 수 있습니다.
artifacts:reports:requirements#
requirements 리포트는 requirements.json 파일을 수집합니다. 수집된 Requirements 리포트는
아티팩트로 GitLab에 업로드되며, 기존 요구 사항은
Satisfied로 표시됩니다.
GitLab은 하나 이상의 리포트 결과를 프로젝트 요구 사항에 표시할 수 있습니다.
artifacts:reports:sarif#
히스토리
- GitLab 18.11에서
sarif_ingestion이라는 기능 플래그와 함께 - GitLab 19.1에서 기본적으로 활성화되었습니다.
- GitLab 19.2에서 일반 공급(Generally available) 되었습니다.
sarif 리포트는
SARIF 2.1.0 출력을 내보내는
도구의 보안 결과를 수집합니다. 수집된 SARIF 리포트는 아티팩트로 GitLab에 업로드됩니다.
Semgrep, ESLint 보안 플러그인, GitHub Advanced Security 도구 등 SARIF 호환 스캐너의 결과를 수집하려면 이 리포트 유형을 사용합니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 파이프라인의 Security 탭.
- 보안 대시보드.
- 프로젝트 취약점 리포트.
아티팩트는 job 상태와 관계없이 항상 업로드되지만, 결과는 job이 성공한 경우에만 수집됩니다.
예시:
semgrep:
image: returntocorp/semgrep
script:
- semgrep ci --sarif --output gl-sarif-report.sarif
artifacts:
reports:
sarif: gl-sarif-report.sarif
동작, 제한 사항, 필드 매핑, 추론된 리포트 유형에 대한 자세한 내용은 SARIF 리포트를 참고합니다.
artifacts:reports:sast#
sast 리포트는 SAST 취약점을 수집합니다.
수집된 SAST 리포트는 아티팩트로 GitLab에 업로드됩니다.
자세한 내용은 다음을 참고합니다.
artifacts:reports:secret_detection#
secret-detection 리포트는 탐지된 시크릿을
수집합니다. 수집된 시크릿 탐지 리포트는 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 머지 리퀘스트의 보안 스캔 리포트.
- 파이프라인 보안 탭.
- 보안 대시보드.
artifacts:reports:terraform#
terraform 리포트는 OpenTofu tfplan.json 파일을 가져옵니다.
자격 증명을 제거하려면 JQ 처리가 필요합니다.
수집된 OpenTofu plan 리포트는 아티팩트로 GitLab에 업로드됩니다.
GitLab은 하나 이상의 리포트 결과를 머지 리퀘스트의 OpenTofu 위젯에 표시할 수 있습니다.
자세한 내용은 머지 리퀘스트에 tofu plan 정보 출력하기를 참고합니다.