Help us learn about your current experience with the documentation. Take the survey.
教程:以 SBOM 格式导出依赖项列表
- Tier: Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
依赖扫描输出可以导出为 CycloneDX JSON 格式。
本教程将向您展示如何为流水线生成 CycloneDX JSON SBOM,然后将其作为 CI 作业构建产物上传。
开始之前
设置依赖扫描。详细说明请遵循依赖扫描教程。
创建配置文件
-
创建一个具有
api范围和Developer角色的私有访问令牌。 -
将令牌值添加为名为
PRIVATE_TOKEN的 CI/CD 变量。 -
使用以下代码创建一个 代码片段。
Filename:
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) # Status is 200 when JSON is generated. # Status is 202 when generate JSON job is running. 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: - | curl --header "Authorization: Bearer $PRIVATE_TOKEN" --output export.sh --url "https://gitlab.com/api/v4/snippets/<SNIPPET_ID>/raw" - /bin/sh export.sh artifacts: paths: - "gl-sbom-merged-*.cdx.json" -
转到 构建 > 流水线,并确认最新的流水线已成功完成。
在作业构建产物中,应该存在 gl-sbom-merged-<pipeline_id>.cdx.json 文件。