CI/CD artifacts reports 타입
CI/CD artifacts reports 타입 (CI/CD artifacts reports types)
artifacts:reports는 include된 템플릿이 job에서 생성한 테스트 리포트, 코드 품질 리포트, 보안 리포트 등 다양한 산출물을 수집하는 키워드예요. 이 리포트들 중 일부는 MR·파이프라인 보기·보안 대시보드에 정보를 표시하는 데 쓰입니다.
출처: 문서
본문
artifacts: reports용으로 만든 artifact는 job의 결과(성공·실패)와 관계없이 항상 업로드돼요.
[!NOTE] 보안 리포트 타입(
sarif,sast,dast,container_scanning,dependency_scanning,secret_detection,api_fuzzing,coverage_fuzzing)의 경우 artifact는 항상 업로드되지만, 발견 항목(finding)은 생성 job이 성공했을 때만 수집됩니다.allow_failure: true가 있는 job을 포함해 실패한 job은 수집된 발견 항목을 만들지 않아요. 자세한 내용은 스캐너 종료 코드를 참고하세요.
artifacts:expire_in으로 artifact 만료 시간을 설정할 수 있는데, 이는 인스턴스의 기본 설정을 덮어써요. GitLab.com은 다른 기본 artifact 만료 값을 가질 수 있어요.
일부 artifacts:reports 타입은 같은 파이프라인의 여러 job이 생성할 수 있고, 각 job의 MR·파이프라인 기능에서 사용돼요. 리포트 출력 파일을 찾아보려면 job 정의에 artifacts:paths 키워드를 포함해야 해요.
[!NOTE] 자식 파이프라인의 artifacts를 사용한 부모 파이프라인의 결합 리포트는 지원되지 않아요. 이 기능 지원은 epic 8205에 제안되어 있습니다.
artifacts:reports:accessibility
accessibility 리포트는 pa11y로 MR에서 도입된 변경의 접근성 영향을 보고해요. GitLab은 하나 이상의 리포트 결과를 MR 접근성 위젯에 표시할 수 있습니다. 자세한 내용은 접근성 테스트 문서를 참고하세요.
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
- Tier: Ultimate
api_fuzzing 리포트는 API 퍼징 버그를 artifact로 수집해요. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 보안 스캔 리포트.
- 프로젝트 취약점 리포트.
- 파이프라인 Security 탭.
- 보안 대시보드.
artifacts:reports:browser_performance
- Tier: Premium, Ultimate
browser_performance 리포트는 브라우저 성능 테스트 지표를 artifact로 수집해요. 이 artifact는 sitespeed.io용 GitLab 플러그인이 생성한 JSON 파일입니다. GitLab은 결과를 MR에 표시합니다. 자세한 내용은 브라우저 성능 테스트 문서를 참고하세요. GitLab은 여러 browser_performance 리포트의 결합 결과는 표시할 수 없어요.
artifacts:reports:coverage_report
coverage_report로 Cobertura 또는 JaCoCo 형식의 커버리지 리포트를 수집할 수 있어요. 파이프라인이 완료되면 GitLab이 리포트를 파싱해서 MR diff에 줄 단위 커버리지 annotation을 표시합니다.
[!NOTE] 이 키워드는 diff annotation만 생성해요. MR 위젯에 커버리지 백분율을 표시하거나 커버리지 이력 그래프를 채우지는 않습니다. 커버리지 백분율을 표시하려면
coverage키워드를 별도로 구성하세요.
자세한 내용은:
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
여러 리포트를 생성하고 와일드카드로 수집할 수 있어요. GitLab이 결과를 단일 리포트로 병합합니다. 자식 파이프라인의 커버리지 리포트는 MR diff annotation에는 나타나지만 부모 파이프라인과 공유되지는 않아요.
artifacts:reports:codequality
codequality 리포트는 코드 품질 이슈를 수집해요. 수집된 코드 품질 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 코드 품질 리포트.
- MR diff annotation.
- 전체 리포트.
artifacts:expire_in 값은 1 week로 설정됩니다.
artifacts:reports:container_scanning
- Tier: Ultimate
container_scanning 리포트는 컨테이너 스캐닝 취약점을 수집해요. 수집된 컨테이너 스캐닝 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 컨테이너 스캐닝 위젯.
- 파이프라인 Security 탭.
- 보안 대시보드.
- 프로젝트 취약점 리포트.
artifacts:reports:coverage_fuzzing
- Tier: Ultimate
coverage_fuzzing 리포트는 커버리지 퍼징 버그를 수집해요. 수집된 커버리지 퍼징 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 보안 스캔 리포트.
- 파이프라인 Security 탭.
- 프로젝트 취약점 리포트.
- 보안 대시보드.
artifacts:reports:cyclonedx
- Tier: Ultimate
이 리포트는 CycloneDX 프로토콜 형식을 따르는 프로젝트 구성 요소를 설명하는 소프트웨어 자재 명세서(SBOM)예요. 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 artifact를 노출하는 job의 예시는 이렇습니다.
artifacts:
reports:
cyclonedx:
- gl-sbom-npm-npm.cdx.json
- gl-sbom-bundler-gem.cdx.json
artifacts:reports:dast
- Tier: Ultimate
dast 리포트는 DAST 취약점을 수집해요. 수집된 DAST 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 보안 스캔 리포트.
- 파이프라인 Security 탭.
- 프로젝트 취약점 리포트.
- 보안 대시보드.
artifacts:reports:dependency_scanning
- Tier: Ultimate
dependency_scanning 리포트는 의존성 스캐닝 취약점을 수집해요. 수집된 의존성 스캐닝 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 의존성 스캐닝 위젯.
- 파이프라인 Security 탭.
- 보안 대시보드.
- 프로젝트 취약점 리포트.
- 의존성 목록.
artifacts:reports:dotenv
dotenv 리포트는 파일에서 환경 변수를 수집해서 파이프라인의 이후 job에 CI/CD 변수로 사용할 수 있게 해줘요. 자세한 내용은 dotenv 변수 문서를 참고하세요.
artifacts:reports:junit
junit 리포트는 JUnit 리포트 형식 XML 파일을 수집해요. 수집된 단위 테스트 리포트는 artifact로 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
- Tier: Premium, Ultimate
load_performance 리포트는 부하 성능 테스트 지표를 수집하고 artifact로 업로드해요. 결과는 MR 부하 테스트 위젯에 표시됩니다. 여러 load_performance 리포트의 결합 결과는 지원되지 않아요.
artifacts:reports:metrics
- Tier: Premium, Ultimate
metrics 리포트는 Metrics를 수집해요. 수집된 Metrics 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 MR metrics 리포트 위젯에 표시할 수 있어요.
artifacts:reports:requirements
- Tier: Ultimate
requirements 리포트는 requirements.json 파일을 수집해요. 수집된 Requirements 리포트는 artifact로 GitLab에 업로드되고, 기존 requirements가 Satisfied로 표시됩니다. GitLab은 하나 이상의 리포트 결과를 프로젝트 requirements에 표시할 수 있어요.
artifacts:reports:sarif
-
Tier: Ultimate
-
GitLab 18.11에서
sarif_ingestion이라는 기능 플래그와 함께 도입. 기본적으로 비활성화. -
GitLab 19.1에서 기본으로 활성화.
-
GitLab 19.2에서 일반 공개. 기능 플래그
sarif_ingestion제거.
sarif 리포트는 SARIF 2.1.0 출력을 내는 도구의 보안 발견 항목을 수집해요. 수집된 SARIF 리포트는 artifact로 GitLab에 업로드됩니다. Semgrep, ESLint 보안 플러그인, GitHub Advanced Security 도구 같은 SARIF 호환 스캐너의 발견 항목을 수집할 때 이 리포트 타입을 쓰세요. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- 파이프라인 Security 탭.
- 보안 대시보드.
- 프로젝트 취약점 리포트.
[!NOTE] artifact는 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 리포트는 artifact로 GitLab에 업로드됩니다. 자세한 내용은:
artifacts:reports:secret_detection
secret-detection 리포트는 감지된 시크릿을 수집해요. 수집된 시크릿 감지 리포트는 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 다음 위치에 표시할 수 있습니다.
- MR 보안 스캔 리포트.
- 파이프라인 보안 탭.
- 보안 대시보드.
artifacts:reports:terraform
terraform 리포트는 OpenTofu tfplan.json 파일을 얻어요. 자격 증명을 제거하려면 JQ 처리가 필요합니다. 수집된 OpenTofu 플랜 리포트는 artifact로 GitLab에 업로드됩니다. GitLab은 하나 이상의 리포트 결과를 MR OpenTofu 위젯에 표시할 수 있어요. 자세한 내용은 tofu plan 정보를 MR에 출력 문서를 참고하세요.
더 알아보기
artifacts:reports는 보안·테스트·품질 리포트를 GitLab UI(MR 위젯, 파이프라인 Security 탭, 대시보드)와 연결해 주는 다리 역할을 해요. 보안 리포트 타입은 artifact가 항상 업로드되더라도 발견 항목은 성공한 job에서만 수집된다는 점을 기억하세요. 리포트 출력 파일을 직접 열어 보려면 artifacts:paths도 함께 지정해야 하고, 만료 시간은 artifacts:expire_in으로 조정할 수 있어요.