튜토리얼: SBOM 형식으로 종속성 목록 내보내기
프로젝트 종속성에 대한 CycloneDX 형식의 SBOM(소프트웨어 자재 명세서)을 생성하고 내보내며 CI/CD 아티팩트로 저장하는 방법을 알아봅니다.
종속성 스캔 출력을 CycloneDX JSON 형식으로 내보낼 수 있습니다. 이 튜토리얼에서는 파이프라인에 대한 CycloneDX JSON SBOM을 생성한 다음 CI job 아티팩트로 업로드하는 방법을 보여줍니다. 시작하기 전에 # 종속성 스캔을 설정합니다. 자세한 지침은 종속성 스캔 튜토리얼 을 따르세요. 구성 파일 만들기 # api 범위와 Developer 권한으로 개인 액세스 토큰을 만듭니다. 토큰 값을 PRIVATE_TOKEN 이라는 CI/CD 변수로 추가합니다. 다음 코드로 스니펫 을 만듭니다. 파일 이름: export.sh # ! /bin/sh function create_export { curl --silent \ --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \ -X 'POST' --data "export_type=sbom" \ "https://gitlab.com/api/v4/pipelines/$CI_PIPELINE_ID/dependency_list_exports" \ | jq '.id' } function check_status { curl --silent \ --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \ --write-out "%{http_code}" --output /dev/null \ https://gitlab.com/api/v4/dependency_list_exports/$1 } function download { curl --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" \ --output "gl-sbom-merged-$CI_PIPELINE_ID.cdx.json" \ "https://gitlab.com/api/v4/dependency_list_exports/$1/download" } function export_sbom { local ID=$(create_export) for run in $(seq 0 3); do local STATUS=$(check_status $ID) # JSON이 생성되면 상태는 200입니다. # JSON 생성 job이 실행 중이면 상태는 202입니다. if [ $STATUS -eq "200" ]; then download $ID exit 0 elif [ $STATUS -ne "202" ]; then exit 1 fi echo "Waiting for JSON to be generated" sleep 5 done exit 1 } export_sbom 이 export.sh 스크립트는 다음 단계로 작동합니다: 현재 파이프라인에 대한 CycloneDX SBOM 내보내기를 만듭니다. 해당 내보내기의 상태를 확인하고 준비가 되면 중지합니다. CycloneDX SBOM 파일을 다운로드합니다. 다음 코드로 .gitlab-ci.yml 을 업데이트합니다. export-merged-sbom: image: alpine before_script: - apk add --update jq curl stage: .post script:
