GitLab CI
포털은 GitHub Action을 미러링하는 include 가능한 GitLab CI 템플릿을 제공합니다 — 스캔을 트리거하고 최종 상태까지 폴링한 다음 빌드 게이트를 평가합니다. 템플릿은 단일 잡이며, 어떤 필드든 확장하거나 오버라이드할 수 있습니다.
템플릿이 SCA 보고서를 머지 요청 노트로 답니다. 그러려면 포털에 두 가지를 설정해야 합니다.
GITLAB_TOKEN입니다. 스캔 대상 프로젝트에 노트를 쓸 수 있는 토큰이어야 합니다. 배포 단위라서 포털은 어디서나 하나의 신원으로 코멘트합니다.- 자체 호스팅이라면
GITLAB_API_BASE입니다. 기본값이https://gitlab.com/api/v4이고, 자체 호스팅은https://gitlab.example.com/api/v4형태입니다.
그 인스턴스가 사내 인증기관의 인증서를 쓴다면 이 호출도 다른 모든 외부 호출과 같은 방식으로 검증합니다. 사설 인증기관을 봅니다.
GitLab CI/CD를 사용하는 GitLab 프로젝트를 운영하는 엔지니어. 포털용 API Key가 필요합니다 — API keys 참고.
빠른 시작
# .gitlab-ci.yml
include:
- remote: 'https://raw.githubusercontent.com/trustedoss/trusca/v0.23.0/templates/gitlab-ci.yml'
variables:
TRUSTEDOSS_API_URL: 'https://trustedoss.example.com'
TRUSTEDOSS_PROJECT_ID: '01H7XYZ…'
# TRUSTEDOSS_API_KEY는 masked CI/CD 변수입니다 — 여기에 절대 적지 마세요.
베이스 템플릿은 hidden입니다 — 직접 만든 잡에서 extend해 materialize해야 하며, 베이스를 extend하지 않는 파이프라인은 SCA를 자동 트리거하지 않습니다. 다음과 같은 잡을 추가하세요.
sca:
extends: .trustedoss-sca
셋업
1. API Key 생성
포털에서 /integrations → API keys → Create API key. 이 파이프라인이 스캔할 프로젝트에 project scope로 묶거나, 팀이 소유한 모든 프로젝트를 덮으려면 team을 고르세요. "이 키가 할 수 있는 일"은 읽기 및 쓰기로 설정하세요. 스캔을 실행하는 동작이라 기본값인 읽기 전용 키는 거부됩니다. 그 외에는 발급자의 역할을 그대로 물려받습니다. API keys 참고.
2. masked CI/CD 변수로 Key 저장
GitLab 프로젝트에서 Settings → CI/CD → Variables → Add variable.
- Key —
TRUSTEDOSS_API_KEY - Value — 전체 Key(
tos_<prefix>_<secret>) - Type —
Variable - Flags — Masked(yes), Protected(
main한정 권장)
masked 플래그는 잡 로그에 Key가 그대로 노출되는 것을 막습니다.
3. URL과 프로젝트 ID 설정
TRUSTEDOSS_API_URL과 TRUSTEDOSS_PROJECT_ID는 다음 중 하나에 둘 수 있습니다.
.gitlab-ci.yml의variables:(읽기 권한자에게 보임).- 또는 CI/CD 변수(여러 환경을 운영한다면 더 나은 선택).
어느 쪽이든 TRUSTEDOSS_API_KEY만 masked여야 합니다.
변수
| 변수 | 필수 | 기본값 | 설명 |
|---|---|---|---|
TRUSTEDOSS_API_URL | yes | — | 포털 base URL. |
TRUSTEDOSS_API_KEY | yes | — | API Key(masked CI/CD 변수). |
TRUSTEDOSS_PROJECT_ID | yes | — | 프로젝트 UUID. |
TRUSTEDOSS_SCAN_KIND | no | source | source 또는 container. |
TRUSTEDOSS_FAIL_ON_GATE | no | true | true이면 게이트 실패 시 잡이 1로 종료. |
TRUSTEDOSS_POLL_TIMEOUT | no | 1800 | 최종 상태까지 기다리는 최대 초. |
TRUSTEDOSS_POLL_INTERVAL | no | 30 | 폴링 간격(초). |
TRUSTEDOSS_POST_MR_COMMENT | no | true | 향후 GitLab Notes API 통합용 예약. 현재 릴리스에서는 요청이 스테이징되지만 백엔드가 전송할 수 없습니다 — 위 경고 참고. |
게이트 결과의 gate 값은 pass 또는 fail입니다. 그 밖의 값이 오면 판정을 기록하기 전에 FATAL: 줄을 남기고 종료 코드 1로 작업을 멈춥니다. 게이트 엔드포인트가 예상하지 못한 HTTP 상태를 돌려줄 때와 같은 처리이고, TRUSTEDOSS_FAIL_ON_GATE가 false여도 마찬가지입니다. 템플릿이 읽지 못한 판정을 통과로 다루지 않기 위해서입니다.