Skip to main content

为存储库配置自动依赖项提交

可使用自动依赖项提交来提交存储库中的可转移依赖项数据。 这使你能够使用依赖项关系图分析这些可转移依赖项。

谁可以使用此功能?

具有管理员角色的存储库所有者、组织所有者、安全管理员和用户

关于自动依赖项提交

注意

自动依赖项提交不支持所有包生态系统。 有关支持的生态系统的当前列表,请参阅“依赖项关系图支持的包生态系统”。

依赖项关系图会分析存储库中的清单和锁定文件,帮助用户了解其软件项目依赖的上游包。 但是,在某些生态系统中,可转移依赖项的解析发生在生成时,GitHub 无法仅基于存储库的内容自动发现所有依赖项。

在为存储库启用自动依赖项提交时,GitHub 会自动确定存储库中的可转移依赖项,并使用 依赖项提交 API 将这些依赖项提交到 GitHub。 然后,可使用依赖项关系图浏览这些依赖项。 Dependabot 将通过生成 Dependabot alerts,通知你有关这些依赖项的安全更新。

使用自动依赖项提交将计入 GitHub Actions 分钟。 有关详细信息,请参阅“关于 GitHub Actions 的计费”。

或者,可以选择为自动依赖项提交配置自托管运行器或 GitHub 托管的 大型运行器。 有关详细信息,请参阅使用自托管运行器访问专用注册表使用 GitHub 托管的大型运行器进行自动依赖项提交

先决条件

必须为存储库启用依赖项关系图才能启用自动依赖项提交。

还必须为存储库启用 GitHub Actions 才能使用自动依赖项提交。 有关详细信息,请参阅“管理存储库的 GitHub Actions 设置”。

启用自动依赖项提交

存储库管理员可以按照此过程所述的步骤为存储库启用或禁用自动依赖项提交。

组织所有者可使用安全配置为多个存储库启用自动依赖项提交。 有关详细信息,请参阅“删除自定义安全配置”。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

  3. 在边栏的“Security”部分中,单击“ Advanced Security”****。

  4. 在“依赖项关系图”下,单击“自动依赖项提交”旁边的下拉菜单,然后选择“已启用”。

为存储库启用自动依赖项提交后,GitHub 将:

  • 监视仓库所有分支上仓库根目录中清单文件的更改。
  • 运行与每个已更改清单的包生态系统关联的依赖项关系图生成操作。
  • 根据结构执行自动依赖项提交操作。

可以通过查看存储库的“操作”选项卡来查看有关自动工作流运行的详细信息。

注意

在你启用自动依赖项提交后,系统将自动运行相关操作。 启用后,每当默认分支上的提交更新清单文件时,它都会自动运行。

使用自托管运行器访问专用注册表

可以将自托管运行器配置为运行自动依赖项提交作业,而不是使用 GitHub Actions 基础结构。 这是访问专用 Maven 注册表所必需的。 自托管运行器必须在 Linux 或 macOS 上运行。 对于 .NET 和 Python 自动提交,它们必须能够访问公共 Internet 以下载最新的组件检测版本。

  1. 在存储库或组织级别预配一个或多个自托管运行器。 有关详细信息,请参阅 Self-hosted runnersAdding self-hosted runners
  2. 为希望自动依赖项提交使用的每个运行器分配 dependency-submission 标签。 有关详细信息,请参阅“Using labels with self-hosted runners”。
  3. 在边栏的“Security”部分中,单击“ Advanced Security”****。
  4. 在“依赖项关系图”下,单击“自动依赖项提交”旁边的下拉菜单,然后选择“为标记的运行器启用”。

启用后,自动依赖项提交作业将在自托管运行器上运行,除非:

  • 自托管运行器不可用。
  • 没有任何使用 dependency-submission 标签标记的运行器组。

注意

对于使用自托管运行器和 Maven 专用注册表的 Maven 或 Gradle 项目,需要修改 Maven 服务器的设置文件,以便依赖项提交工作流可以连接到这些注册表。 有关 Maven 服务器设置文件的详细信息,请参阅 Maven 文档中的安全性和部署设置

使用 GitHub 托管的 大型运行器 进行自动依赖项提交

GitHub Team 或 GitHub Enterprise Cloud 用户可以使用 大型运行器 来运行自动依赖项提交作业。

  1. 使用名称 dependency-submission 在组织级别预配大型运行器。 有关详细信息,请参阅将 大型运行器 托管的运行器添加到组织
  2. 授予存储库对运行器的访问权限。 有关详细信息,请参阅允许仓库访问 大型运行器
  3. 在“依赖项关系图”下,单击“自动依赖项提交”旁边的下拉菜单,然后选择“为标记的运行器启用”。

自动依赖项提交故障排除

自动依赖项提交会尽最大努力在使用缓存操作的运行之间缓存包下载,以加快工作流。 对于自承载运行器,你可能需要在自己的基础结构内管理此缓存。 为此,你可以将环境变量 GH_DEPENDENCY_SUBMISSION_SKIP_CACHE 设置为 true,以禁用内置缓存。 有关详细信息,请参阅“Store information in variables”。

清单重复数据删除

依赖项关系图可以通过三种不同的方式来了解依赖项:静态分析、自动提交和用户提交。 一个仓库可以配置多种方法,这会导致同一个包清单被扫描多次,而且每次扫描可能会产生不同的结果。 依赖项关系图使用去重逻辑来分析输出,为每个清单文件优先选取最准确的信息。

依赖项关系图会依据以下优先级规则,仅显示每个清单文件的一个实例。

  1. 用户提交具有最高优先级,因为它们通常是在项目构建期间创建的,包含最完整的信息。****
    • 如果存在来自不同检测器的多个手动快照,这些快照将根据关联器按字母顺序进行排序,并且会采用第一个快照。
    • 如果有两个使用相同检测器的关联器,已解析的依赖项将合并。 有关关联器和检测器的详细信息,请参阅 适用于依赖项提交的 REST API 终结点
  2. 自动提交具有第二高的优先级,因为它们同样是在项目构建期间创建的,但并非由用户提交。****
  3. 静态分析结果会在没有其他可用数据的情况下被采用。****

包生态系统特定信息

Maven 项目

对于 Maven 项目,自动依赖项提交运行 的是 Maven 依赖项树依赖项提交的开放源代码分支。 此分支使 GitHub 能够与上游仓库保持同步,并保留一些仅适用于自动提交的更改。 该分支的源可在 advanced-security/maven-dependency-submission-action 中查看。

如果存储库的依赖项似乎不准确,请检查生成的上一个依赖项关系图的时间戳是否与 pom.xml 文件的最后一次更改匹配。 时间戳在存储库的 Dependabot alerts 选项卡中的警报表中可见。如果推送更新 pom.xml 的提交,会触发依赖项树提交操作的新运行,并强制重新生成该存储库的依赖项关系图。

Gradle 项目

对于 Gradle 项目,自动依赖项提交运行的是来自 gradle/actions 的开放源代码 Gradle Actions 的一个分支。 该分支可在 actions/gradle-build-tools-actions 中查看。 你可以在仓库的“Actions”选项卡下查看自动提交操作的结果****。每次运行都将标记为“自动依赖项提交 (Gradle)”,其输出将包含提交到 API 的操作的 JSON 有效负载。

.NET 项目

.NET 自动提交操作使用开源 component-detection 项目作为其依赖项检测的引擎。 它支持 .NET 8.x、9.x 和 10.x。 如果仓库的 dependabot.ymlnuget 定义为 package-ecosystem,或者在仓库的根目录中有受支持的清单文件,则会运行 .NET 自动提交。 受支持的清单文件包括 .sln.csprojpackages.config.vbproj.vcxproj.fsproj

Python 项目

Python 使用开源 component-detection 项目作为其基础图生成引擎。 仅当仓库的根目录中有 requirements.txt 文件时,才会运行 Python 的自动提交操作。 Python 自动提交目前不支持专用包;requirements.txt 中引用的、未公开可用的包将导致自动提交操作失败。

其他阅读材料