Skip to main content

此版本的 GitHub Enterprise Server 已于以下日期停止服务 2024-03-26. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

排查 Dependabot 错误

有时,Dependabot 无法提出拉取请求以更新依赖项。 您可以查看错误并取消阻止 Dependabot。

注意:站点管理员必须先为 你的 GitHub Enterprise Server 实例设置 Dependabot updates,然后你才能使用此功能。 有关详细信息,请参阅“为企业启用 Dependabot”。

关于 Dependabot 错误

Dependabot 提出拉取请求,以更新依赖项。 Dependabot 可能会针对版本更新和/或安全更新提出拉取请求,具体取决于存储库的配置方式。 您可以按与任何其他拉取请求相同的方式管理这些拉取请求,但也有一些额外的可用命令。 有关启用 Dependabot 的信息,请参阅“配置 Dependabot 安全更新”和“配置 Dependabot 版本更新”。

如果有任何因素阻止 Dependabot 提出拉取请求,则报告为错误。

使用 Dependabot security updates 调查错误

当 Dependabot 被阻止创建拉取请求以修复 Dependabot 警报时,它会在警报上发布错误消息。 Dependabot alerts 视图显示尚未解决的所有警报列表。 若要访问警报视图,请单击存储库“安全”选项卡上的“Dependabot alerts” 。 如果旨在修复有漏洞依赖项的拉取请求已生成,则警报将包括指向该拉取请求的链接。

Dependabot alerts 视图的屏幕截图,其中显示了两个警报。 在一个警报的右侧,标题为“#353”的拉取请求链接以橙色边框突出显示。

有多个原因可能导致警报中没有拉取请求链接:

  1. Dependabot security updates 未对仓库启用。
  2. 警报针对未在锁文件中显式定义的间接或过渡依赖项。
  3. 某个错误阻止了 Dependabot 创建拉取请求。

如果某个错误阻止了 Dependabot 创建拉取请求,您可以通过单击警报来显示错误详情。

使用 Dependabot version updates

调查错误

当 Dependabot 被阻止创建拉取请求以更新生态系统中的依赖项时, 的详细信息,它会在清单文件 上发布错误图标。

由 Dependabot 管理的清单文件列于 Dependabot 选项卡上。若要访问此选项卡,请在存储库的“见解”选项卡上单击“依赖项关系图”,然后单击“Dependabot”选项卡 。

Dependabot 视图的屏幕截图。 警报图标和标题为“上次检查时间为 10 小时前”的链接以橙色边框突出显示。

若要查看任何清单文件的日志,请单击“上次检查时间以前”链接,然后单击“查看日志” 。

了解 Dependabot 错误

安全更新拉取请求用于将有漏洞依赖项升级到包含漏洞修复的最低版本。 而版本更新拉取请求用于将依赖项升级到包清单文件和 Dependabot 配置文件允许的最新版本。 因此,某些错误特定于一种类型的更新。

Dependabot 无法将依赖项更新到无漏洞版本

仅限安全更新。 Dependabot 无法创建拉取请求以将有漏洞依赖项更新到安全版本,而又不破坏此存储库依赖项关系图中的其他依赖项。

每个具有依赖项的应用程序都有一个依赖关系图,即应用程序直接或间接依赖的每个包版本的定向非循环图。 每次更新依赖项时,必须解决此图,否则将无法构建应用程序。 当生态系统具有深刻而复杂的依赖关系图(例如 npm 和 RubyGems)时,如果不升级整个生态系统,往往难以升级单个依赖项。

避免这个问题的最佳办法是跟上最新发布的版本,例如启用版本更新。 这增加了通过不破坏依赖关系图的简单升级解决一个依赖项中的漏洞的可能性。 有关详细信息,请参阅“配置 Dependabot 版本更新”。

Dependabot 尝试在没有警报的情况下更新依赖项

仅限安全更新。 Dependabot 更新显式定义的可传递依赖项,这些依赖项对于所有生态系统而言易受攻击。 对于 npm,Dependabot 会引发拉取请求,如果这是修复可传递依赖项的唯一方法,则该请求还会更新父依赖项。

例如,在 A 版本 ~2.0.0 上有一个依赖项的项目在 B 版本 ~1.0.0(已解析为 1.0.1)上有一个可传递依赖项。

my project
|
--> A (2.0.0) [~2.0.0]
       |
       --> B (1.0.1) [~1.0.0]

如果针对 B 版本 <2.0.0 发布安全漏洞,而修补程序在 2.0.0 上可用,则 Dependabot 将尝试更新 B,但会发现无法更新,因为 A 具有限制,仅允许较低的易受攻击版本。 为了修复漏洞,Dependabot 将查找允许使用固定版本的 B 的依赖项 A 的更新。

Dependabot 会自动生成一个拉取请求以同时升级父级和子级可传递依赖项。

对于已应用到默认分支的更新,Dependabot 无法关闭对该更新的已打开的拉取请求

对于有关依赖项更新的拉取请求,Dependabot 将在检测到这些更新已提交到默认分支后关闭这些拉取请求。 但在极少数情况下,拉取请求可能会继续保持打开状态。 如果你注意到您已手动提交了对依赖项更新,但对该更新的拉取请求仍处于打开状态,则可以在该拉取请求的注释中使用以下命令中的一个:

  • @dependabot recreate
  • @dependabot rebase

这两种注释都会触发 Dependabot,以检查该依赖项是否不再可升级或存在漏洞。 如果 Dependabot 检测到不再需要该拉取请求,则在此特定情况下将会关闭该拉取请求。

有关 Dependabot 注释命令的详细信息,请参阅“管理依赖项更新的所有拉取请求”。

Dependabot 无法更新到所需的版本,因为已经为最新版本打开了拉取请求

仅限安全更新。 Dependabot 不会创建拉取请求以将有漏洞依赖项更新到安全版本,因为已存在更新此依赖项的打开拉取请求。 如果在一个依赖项中检测到漏洞,但已经存在将该依赖项更新到最新版本的打开拉取请求时,您将会看到此错误。

有两个选项:您可以查看打开的拉取请求,确认更改安全后合并它,或者关闭该拉取请求并触发新的安全更新拉取请求。 有关详细信息,请参阅“手动触发 Dependabot 拉取请求”。

不需要安全更新程序,因为 DEPENDENCY 不再易受攻击

仅限安全更新。 Dependabot 无法关闭拉取请求以更新不易受攻击或不再易受攻击的依赖项。 如果特定版本的依赖项易受攻击,则当依赖项关系图数据过时,或者当依赖项关系图和 Dependabot 不一致时,可能会看到此错误。

若要调试问题,建议首先检查存储库的依赖项关系图,审查它检测到的依赖项版本,如果标识的版本与存储库中使用的版本匹配,则进行检查。

如果怀疑依赖项关系图数据过期,可能需要手动更新存储库的依赖项关系图,或需要进一步调查依赖项信息。 有关详细信息,请参阅“依赖关系图疑难排解”。

如果能够确认依赖项版本不再易受攻击,则可以关闭 Dependabot 拉取请求。

Dependabot 在更新过程中超时

Dependabot 评估所需更新和准备拉取请求所用的时间超过了允许的最大时间。 此错误通常只出现在具有许多清单文件的大型存储库中,例如具有数百个 package.json 文件的 npm 或 yarn 单存储库项目。 对 Composer 生态系统的更新也需要较长的时间来评估,可能会超时。

此错误难以解决。 如果版本更新超时,可以使用 allow 参数来指定更新最重要的依赖项,或者使用 ignore 参数从更新中排除某些依赖项。 更新配置可能使 Dependabot 能够在规定时间内检查版本更新并生成请求。

如果安全更新超时,您可以通过保持依赖项更新(例如,启用版本更新)来减少更新需要。 有关详细信息,请参阅“配置 Dependabot 版本更新”。

Dependabot 无法再打开拉取请求

Dependabot 生成的打开拉取请求数量存在限制。 如果达到此限制,将无法打开新的拉取请求,并报告此错误。 解决此错误的最佳方法是审查并合并一些打开的拉取请求。

安全性和版本更新拉取请求有各自的限制,因此打开版本更新拉取请求不会阻止安全更新拉取请求的创建。 安全更新拉取请求的限制是 10。 默认情况下,版本更新的限制为 5,但你可以使用配置文件中的 open-pull-requests-limit 参数来更改它。 有关详细信息,请参阅“dependabot.yml 文件的配置选项”。

解决此错误的最佳方法是合并或关闭一些现有拉取请求,然后手动触发新的拉取请求。 有关详细信息,请参阅“手动触发 Dependabot 拉取请求”。

Dependabot 无法解析或访问您的依赖项

如果 Dependabot 尝试检查是否需要更新仓库中的依赖项引用,但无法访问一个或多个依赖项文件,则操作将失败,并返回错误消息“Dependabot can't resolve your LANGUAGE dependency files(无法解析语言依赖项文件)”。 API 错误类型为 git_dependencies_not_reachable

同样,如果 Dependabot 不能访问依赖项所在的私有包注册表,则会产生以下错误之一:

  • “Dependabot 无法访问专用包注册表中的依赖项”
    (API 错误类型:private_source_not_reachable
  • “Dependabot 无法对专用包注册表进行身份验证”
    (API 错误类型:private_source_authentication_failure
  • “Dependabot 在等待专用包注册表时超时”
    (API 错误类型:private_source_timed_out
  • “Dependabot 无法验证专用包注册表的证书”
    (API 错误类型:private_source_certificate_failure

要让 Dependabot 成功更新依赖项引用,请确保所有引用依赖项都托管在可访问的位置。

仅限版本更新。 在运行安全性或版本更新时,有些生态系统必须能够解决来自其来源的所有依赖项,以验证版本更新是否成功。 如果清单或锁定文件包含任何私有依赖项,Dependabot 必须能够访问这些依赖项所在的位置。 组织所有者可以授予 Dependabot 访问包含同一个组织内项目依赖项的私有仓库. 有关详细信息,请参阅“管理组织的安全和分析设置”。 你可以在存储库的 dependabot.yml 配置文件中配置对专用注册表的访问。 有关详细信息,请参阅“dependabot.yml 文件的配置选项”。 此外,Dependabot 不支持所有包管理器的 GitHub 私有依赖项。 有关详细信息,请参阅“关于 Dependabot 版本更新”。

手动触发 Dependabot 拉取请求

如果取消阻止了 Dependabot,您可以手动触发新的尝试来创建拉取请求。

  • 安全更新 - 显示 Dependabot 警报,查看你修复的错误,然后单击“创建 Dependabot 安全更新” 。
  • 版本更新 - 在存储库的“见解”选项卡上单击“依赖项关系图”,然后单击“Dependabot”选项卡 。单击“上次检查时间之前”,查看上次检查版本更新期间 Dependabot 生成的日志文件。 单击“检查更新”****。

延伸阅读