generate-sbom

SKILL.md

Skill: 自动生成 SBOM 文件

功能描述

当用户提供一个 GitLab 仓库地址和分支名称时,自动克隆该仓库并使用 cdxgen 工具生成符合 CycloneDX 规范的 SBOM(软件物料清单)JSON 文件。


前置依赖检查

在执行前需确认以下工具已安装:

工具 检查命令 安装方式
git git --version https://git-scm.com
cdxgen cdxgen --version npm install -g @cyclonedx/cdxgen
python python --version https://python.org(需 ≥ 3.10)

若 cdxgen 未安装,提示用户执行:

npm install -g @cyclonedx/cdxgen

执行命令

所有脚本位于 skills/generate_sbom/scripts/ 目录下,在项目根目录执行以下命令:

公开仓库

python skills/generate_sbom/scripts/generate_sbom.py --url {repo_url} --branch {branch}

私有仓库(需要 Token)

python skills/generate_sbom/scripts/generate_sbom.py --url {repo_url} --branch {branch} --token {access_token}

指定输出文件

python skills/generate_sbom/scripts/generate_sbom.py --url {repo_url} --branch {branch} --output {output_file}

指定项目类型(跳过自动检测)

python skills/generate_sbom/scripts/generate_sbom.py --url {repo_url} --branch {branch} --type {project_type}

参数收集规则

  • 若用户未提供 repo_url必须询问请提供 GitLab 仓库地址(https://...)
  • 若用户未提供 branch必须询问请提供要分析的分支名称
  • 若用户未提供 access_token 且克隆失败提示权限错误,询问:该仓库是私有仓库吗?如是,请提供 GitLab Access Token
  • output_fileproject_type 为可选项,不需要主动询问

结果反馈格式

执行成功后,向用户输出以下摘要:

✅ SBOM 生成成功
📄 输出文件:{sbom_file_path}
🏷️  项目名称:{project_name} {project_version}
📦 组件总数:{component_count}
🗂️  组件类型分布:
    - library   : N
    - framework : N
⏱️  生成时间:{timestamp}

错误处理

错误特征 处理方式
Authentication failed / could not read Username 提示:该仓库为私有仓库,请提供 --token 参数
Remote branch not found / pathspec 提示:分支名称不存在,请确认分支名是否正确
cdxgen: command not found 提示:执行 npm install -g @cyclonedx/cdxgen 安装 cdxgen
python: command not found 提示:请安装 Python 3.10+
SBOM 文件为空或组件数为 0 提示:项目类型可能未被识别,请尝试添加 --type 参数手动指定

支持的项目类型

--type 识别文件 技术栈
maven pom.xml Java/Kotlin (Maven)
gradle build.gradle, build.gradle.kts Java/Kotlin (Gradle)
npm package.json Node.js/JS/TS
python requirements.txt, setup.py, Pipfile, pyproject.toml Python
go go.mod Go
rust Cargo.toml Rust
dotnet *.csproj, *.sln C#/.NET
php composer.json PHP
ruby Gemfile Ruby

对话示例

示例 1 — 公开仓库,信息完整

用户:帮我对 https://gitlab.example.com/team/myapp 的 main 分支生成 SBOM

执行:

python skills/generate_sbom/scripts/generate_sbom.py --url https://gitlab.example.com/team/myapp --branch main

示例 2 — 私有仓库

用户:https://gitlab.company.com/backend/order-service 分支 release/2.0 生成 sbom,token 是 glpat-abc123

执行:

python skills/generate_sbom/scripts/generate_sbom.py --url https://gitlab.company.com/backend/order-service --branch release/2.0 --token glpat-abc123

示例 3 — 信息不完整

用户:帮我生成 SBOM

回复:

请提供以下信息:
1. GitLab 仓库地址(https://...)
2. 要分析的分支名称
Installs
1
First Seen
Apr 7, 2026