466 字约 2 分钟
SBOM 生成插件比较 Pull Request 的 Base 和 Head 依赖组件,输出组件变化清单(Delta)。 它只生成报告,不设置质量门禁,退出码只反映生成是否成功。
功能特性
- 组件增量分析:输出新增、删除和版本变化的组件;
- 多种输出格式:支持 JSON Delta、SPDX、CycloneDX 和 SWID;
插件镜像
cnbcool/sca-sbom:latest参数说明
插件参数通过 settings 传递:
| 参数 | 说明 | 默认 |
|---|---|---|
output | 输出文件路径 | ${CNB_BUILD_WORKSPACE}/.cnb-sca/sbom-delta.json |
输出格式由 output 后缀决定:
| 后缀 | 格式 |
|---|---|
.json | cnb-sbom-delta/v1 JSON |
.spdx | SPDX 2.3 Tag-Value |
.spdx.json | SPDX 2.3 JSON |
.cyclonedx.json | CycloneDX JSON |
.cyclonedx.xml | CycloneDX XML |
.swid.xml | SWID XML |
在 CNB 中使用
.cnb.yml
main:
pull_request:
- stages:
- name: 生成 SBOM Delta
image: cnbcool/sca-sbom:latest
settings:
output: ${CNB_BUILD_WORKSPACE}/.cnb-sca/sbom-delta.json输出 SPDX
.cnb.yml
main:
pull_request:
- stages:
- name: 生成 SPDX
image: cnbcool/sca-sbom:latest
settings:
output: ${CNB_BUILD_WORKSPACE}/.cnb-sca/report.spdxJSON Delta 输出说明
{
"schema": "cnb-sbom-delta/v1",
"complete": false,
"base_ref": "base-commit-sha",
"head_ref": "head-commit-sha",
"summary": {
"added": 1,
"removed": 0,
"updated": 1
},
"components": [
{
"type": "added",
"component_id": "golang/github.com/example/library",
"name": "library",
"head_version": "v1.2.0",
"head_path": "go.mod",
"evidence": "gomod"
}
]
}组件变化类型:
added:组件只存在于 Head;removed:组件只存在于 Base;updated:组件身份和来源路径相同,但版本不同。
updated 只表示版本变化,不区分升级或降级。
标准格式说明
SPDX、CycloneDX 和 SWID 输出包含:
- 新增组件的 Head 版本;
- 更新组件的 Head 版本。
退出码
| 退出码 | 说明 |
|---|---|
0 | 报告生成成功,包括没有组件变化的空报告 |
2 | 配置错误或扫描失败 |
下一步
- 插件总览 —— 三个插件的整体配置与门禁说明
- 开源组件漏洞扫描 —— 漏洞门禁与增量规则
- License 扫描 —— License 风险门禁