当 Dependabot 在更新依赖项时遇到错误时,你可以使用此引用来诊断和修复常见问题。
如何查看错误
安全更新错误
当 Dependabot 被阻止创建拉取请求以修复 Dependabot 警报时,它会在警报上发布错误消息。 Dependabot alerts 视图显示尚未解决的所有警报列表。 若要访问警报视图,请单击存储库安全选项卡上的 Dependabot alerts。 如果旨在修复有漏洞依赖项的拉取请求已生成,则警报将包括指向该拉取请求的链接。

出于多种原因,警报可能没有拉取请求链接:
- Dependabot security updates 未对仓库启用。
- 警报针对未在锁文件中显式定义的间接或过渡依赖项。
- 某个错误阻止了 Dependabot 创建拉取请求。
若要查看错误详细信息,请单击警报。
版本更新错误
当 Dependabot 受到阻止而无法创建拉取请求来更新生态系统中的依赖项时,你可以查看作业日志列表,了解有关错误的详细信息。
可从存储库的依赖项关系图访问作业日志列表。 在依赖项关系图中,单击 Dependabot 选项卡,然后单击受影响清单文件右侧,单击“最近更新作业”。
若要查看特定作业的完整日志文件,请在感兴趣的日志条目右侧单击 “查看日志”。

有关详细信息,请参阅“查看 Dependabot 作业日志”。
依赖项解析错误
无法将 DEPENDENCY 更新为非易受攻击的版本
**适用于:** 仅限安全更新
**错误信息:**`Dependabot cannot update DEPENDENCY to a non-vulnerable version`
Dependabot 无法创建拉取请求以将有漏洞依赖项更新到安全版本,而又不破坏此存储库依赖项关系图中的其他依赖项。
每个具有依赖项的应用程序都有一个依赖关系图,即应用程序直接或间接依赖的每个包版本的定向非循环图。 每次更新依赖项时,必须解决此图,否则将无法构建应用程序。 当生态系统具有深刻而复杂的依赖关系图(例如 npm 和 RubyGems)时,如果不升级整个生态系统,往往难以升级单个依赖项。
**分辨率:** 例如,通过启用版本更新来了解最新发布的版本。 这增加了通过不破坏依赖关系图的简单升级解决一个依赖项中的漏洞的可能性。 请参阅“[AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates)”。
在没有警报的情况下更新依赖项
**适用于:** 仅限安全更新
**错误信息:**`Dependabot tries to update dependencies without an alert`
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 将查找允许使用固定版本的 A 的依赖项 B 的更新。
Dependabot 会自动生成一个拉取请求以同时升级父级和子级可传递依赖项。
无法关闭已应用更新的拉取请求
**错误信息:**`Dependabot fails to close a open pull request for an update that has already been applied on the default branch`
对于有关依赖项更新的拉取请求,Dependabot 将在检测到这些更新已提交到默认分支后关闭这些拉取请求。 但在极少数情况下,拉取请求可能会继续保持打开状态。
**分辨率:** 如果你注意到已手动将更新提交到依赖项,并且该更新的拉取请求仍处于打开状态,则可以在拉取请求的注释中使用以下命令之一:
*
@dependabot recreate 或
*
@dependabot rebase。
这两种注释都会触发 Dependabot,以检查该依赖项是否不再可升级或存在漏洞。 如果 Dependabot 检测到不再需要该拉取请求,则在此特定情况下将会关闭该拉取请求。
有关 Dependabot 注释命令的详细信息,请参阅 管理依赖项更新的所有拉取请求。
无法更新到所需版本,因为已存在对最新版本的打开拉取请求
**适用于:** 仅限安全更新
**错误信息:**`Dependabot cannot update to the required version as there is already an open pull request for the latest version`
Dependabot 不会创建拉取请求以将有漏洞依赖项更新到安全版本,因为已存在更新此依赖项的打开拉取请求。 如果在一个依赖项中检测到漏洞,但已经存在将该依赖项更新到最新版本的打开拉取请求时,您将会看到此错误。
**解决方案:** 你可以查看已打开的拉取请求,并在确信更改是安全的情况下立即将其合并;或者关闭该拉取请求,然后触发一个新的安全更新拉取请求。 请参阅[手动触发 Dependabot 拉取请求](#triggering-a-dependabot-pull-request-manually)。
不需要安全更新
**适用于:** 仅限安全更新
**错误信息:**`No security update is needed as DEPENDENCY is no longer vulnerable`
Dependabot 无法关闭拉取请求以更新不易受攻击或不再易受攻击的依赖项。 如果特定版本的依赖项易受攻击,则当依赖项关系图数据过时,或者当依赖项关系图和 Dependabot 不一致时,可能会看到此错误。
**分辨率:** 首先检查存储库的依赖项关系图,查看它检测到的依赖项版本,并检查标识的版本是否与存储库中使用的版本匹配。
如果怀疑依赖项关系图数据过期,可能需要手动更新存储库的依赖项关系图,或需要进一步调查依赖项信息。 请参阅“依赖关系图疑难排解”。
如果能够确认依赖项版本不再易受攻击,则可以关闭 Dependabot 拉取请求。
拉取请求错误
已达到拉取请求限制
**错误信息:**`Dependabot cannot open any more pull requests`
Dependabot 生成的打开拉取请求数量存在限制。 如果达到此限制,将无法打开新的拉取请求,并报告此错误。
**限制:**
- 安全更新拉取请求:10
- 版本更新拉取请求:5(可使用
open-pull-requests-limit配置)
安全性和版本更新拉取请求有各自的限制,因此打开版本更新拉取请求不会阻止安全更新拉取请求的创建。 有关详细信息,请参阅“Dependabot 选项参考”。
**分辨率:** 合并或关闭某些现有拉取请求,并手动触发新的拉取请求。 请参阅[手动触发 Dependabot 拉取请求](#triggering-a-dependabot-pull-request-manually)。
超时和性能错误
更新超时
**错误信息:**`Dependabot timed out during its update`
Dependabot 评估所需更新和准备拉取请求所用的时间超过了允许的最大时间。 此错误通常只出现在具有许多清单文件的大型存储库中,例如具有数百个 package.json 文件的 npm 或 yarn 单存储库项目。 对 Composer 生态系统的更新也需要较长的时间来评估,可能会超时。
**版本更新的解决方法:** 指定要使用 `allow` 参数进行更新的最重要依赖项,或者,使用 `ignore` 参数从更新中排除某些依赖项。 更新配置可能使 Dependabot 能够在规定时间内检查版本更新并生成请求。
**安全更新的解决方案:** 通过保持依赖项的更新状态,例如启用版本更新功能,来减少超时的几率。 有关详细信息,请参阅“[AUTOTITLE](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates)”。
分组错误
无法对依赖项进行分组(版本更新)
**适用于:** 仅限版本更新
**错误信息:**`Dependabot fails to group a set of dependencies into a single pull request for Dependabot version updates`
`groups` 文件中的 [](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#groups--) 配置设置适用于版本更新和安全更新。 使用 `applies-to` 密钥指定应用一组分组规则的位置(版本更新或安全更新)。
不能将单个分组规则集同时应用于_版本_更新和_安全_更新。 相反,如果要使用相同的条件对版本更新和安全更新进行分组,则必须定义两个分别单独命名的分组规则集。
配置分组的版本更新时,你必须为每个包生态系统配置组。
**常见原因 - 空组:** 你可能无意中创建了空组。 例如,在为整体工作在 `dependency-type` 键中设置 `allow` 时,会发生这种情况。
allow:
dependency-type: production
# this restricts the entire job to production dependencies
groups:
development-dependencies:
dependency-type: "development"
# this group will always be empty
allow:
dependency-type: production
# this restricts the entire job to production dependencies
groups:
development-dependencies:
dependency-type: "development"
# this group will always be empty
在此示例中,Dependabot 将:
- 查看依赖项列表,并将工作限制为仅在
production中使用的依赖项。 - 尝试创建名为
development-dependencies的组,即此缩减列表的子集。 - 由于步骤 1 中删除了所有
development-dependencies依赖项,因此development组为空。 -
**单独**更新不在组中的所有依赖项。 由于生产中的依赖项组为空,Dependabot 将忽略该组,并为每个依赖项创建单独的拉取请求。 **分辨率:** 确保配置设置不会彼此取消,并在配置文件中相应地更新它们。 要排查问题,请查看日志。 有关访问清单日志的信息,请参阅 [“如何查看错误](#how-to-view-errors)”。
有关如何为 Dependabot version updates 配置组的详细信息,请参阅 Dependabot 选项参考。
无法对依赖项进行分组(安全更新)
**适用于:** 仅限安全更新
**错误信息:**`Dependabot fails to group a set of dependencies into a single pull request for Dependabot security updates`
`groups` 文件中的 [](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#groups--) 配置设置适用于版本更新和安全更新。 使用 `applies-to` 密钥指定应用一组分组规则的位置(版本更新或安全更新)。 检查是否已将分组配置为应用于安全更新。 如果配置中的一组分组规则中缺少 `applies-to` 密钥,则默认情况下,任何组规则将仅适用于版本更新。
不能将单个分组规则集同时应用于_版本_更新和_安全_更新。 相反,如果要使用相同的条件对版本更新和安全更新进行分组,则必须定义两个分别单独命名的分组规则集。
**安全更新的分组准则:**
- 如果针对使用 **** 键的配置制定了分组规则,Dependabot
directories来自同一个包生态系统中不同目录的依赖项进行分组。。 - Dependabot 将来自
dependabot.yml文件中的其他相关自定义选项应用于分组安全更新的拉取请求。dependabot.yml文件中配置的组规则将覆盖用户界面设置,以便在组织或存储库级别启用或禁用已分组的安全更新。 - Dependabot 不会将来自不同包生态系统的依赖项分组到一起。
- Dependabot 不会使用版本更新来对安全更新进行分组。
有关详细信息,请参阅 关于 Dependabot 安全更新 和 自定义 Dependabot 安全更新的拉取请求。
无法在分组拉取请求中更新依赖项
**错误信息:**`Dependabot fails to update one of the dependencies in a grouped pull request`
对于失败的版本更新和失败的安全更新,你可以使用不同的故障排除技术。
版本更新
**适用于:** 仅限版本更新
Dependabot 将在日志中以及日志末尾的作业摘要中显示失败的更新。
**解决方法:**
- 在拉取请求的注释中使用
@dependabot recreate来重新构建组。 请参阅“管理依赖项更新的所有拉取请求”。 - 如果依赖项仍然无法更新,请使用
exclude-patterns配置,以便从组中排除依赖项。 然后,Dependabot 将提出单独的拉取请求来更新依赖项。 - 如果依赖项仍无法更新,则依赖项本身或该特定生态系统的 Dependabot 可能存在问题。
如果要忽略依赖项的更新,必须执行下列操作之一。
- 为
ignore文件中的依赖关系配置dependabot.yml规则。 有关详细信息,请参阅“Dependabot 选项参考”。 - 对分组更新的拉取请求中的依赖关系使用
@dependabot ignore注释命令。 有关详细信息,请参阅“管理依赖项更新的所有拉取请求”。
安全更新
**适用于:** 仅限安全更新
如果针对安全更新的分组拉取请求失败或无法合并,请手动创建拉取请求,以升级到重大变更的版本。 手动更新分组拉取请求中包含的包时,Dependabot 将重定拉取请求的基准,使其不包含手动更新的包。
如果要忽略依赖项的更新,必须执行下列操作之一。
- 为
ignore文件中的依赖关系配置dependabot.yml规则。 有关详细信息,请参阅“Dependabot 选项参考”。 - 对分组更新的拉取请求中的依赖关系使用
@dependabot ignore注释命令。 有关详细信息,请参阅“管理依赖项更新的所有拉取请求”。
分组拉取请求导致持续集成失败
**适用于:** 仅限版本更新
**错误信息:**`Continuous integration (CI) fails on my grouped pull request`
**解决方法:**
如果失败是由于单个依赖项造成的,请使用 exclude-patterns 配置,以便从组中排除依赖项。 然后,Dependabot 将提出单独的拉取请求来更新依赖项。
如果要忽略依赖项的更新,必须执行下列操作之一。
- 为
ignore文件中的依赖关系配置dependabot.yml规则。 有关详细信息,请参阅“Dependabot 选项参考”。 - 对分组更新的拉取请求中的依赖关系使用
@dependabot ignore注释命令。 有关详细信息,请参阅“管理依赖项更新的所有拉取请求”。
如果继续看到 CI 失败,请删除组配置,以便 Dependabot 还原为对每个依赖项发出单独的拉取请求。 然后,检查并确认每次单独的拉取请求的更新都能正常生效。
身份验证和注册表错误
无法解析或访问依赖项
**错误信息:**`Dependabot can't resolve your LANGUAGE dependency files`
**API 错误类型:**`git_dependencies_not_reachable`
如果 Dependabot 尝试检查是否需要在存储库中更新依赖项引用,但无法访问一个或多个引用的文件,则操作将失败。
专用包注册表错误
Dependabot 在无法访问专用包注册表时,可能会生成以下错误之一:
| 错误消息 | API 错误类型 |
|---|---|
| “Dependabot 无法访问专用包注册表中的依赖项” | private_source_not_reachable |
| “Dependabot 无法向专用包注册表进行身份验证” | private_source_authentication_failure |
| “Dependabot 在等待专用包注册表时超时” | private_source_timed_out |
| “Dependabot 无法验证专用包注册表的证书” | private_source_certificate_failure |
**分辨率:** 请确保所有引用的依赖项都托管在可访问的位置。
**仅限版本更新:**在运行安全性或版本更新时,有些生态系统必须能够解决来自其来源的所有依赖项,以验证版本更新是否成功。 如果清单或锁定文件包含任何私有依赖项,Dependabot 必须能够访问这些依赖项所在的位置。 组织所有者可以授予 Dependabot 访问包含同一个组织内项目依赖项的私有仓库. 有关详细信息,请参阅“[AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-dependabot-to-access-private-or-internal-dependencies)”。 你可以在存储库的 `dependabot.yml` 配置文件中配置对专用注册表的访问。 有关详细信息,请参阅“[AUTOTITLE](/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot)”。 此外,Dependabot 不支持所有包管理器的 GitHub 私有依赖项。 请参阅“[AUTOTITLE](/code-security/dependabot/ecosystems-supported-by-dependabot/supported-ecosystems-and-repositories)”。
手动触发 Dependabot 拉取请求
如果取消阻止了 Dependabot,您可以手动触发新的尝试来创建拉取请求。
**对于安全更新:** 显示 Dependabot 警报,显示出您已修复的错误, 然后点击 **创建 Dependabot 安全更新**。
**针对版本更新**:在存储库的“见解”选项卡上单击“依赖项关系图”,然后单击“Dependabot”选项卡。单击“上次检查时间之前”,查看上次检查版本更新期间 Dependabot 生成的日志文件。**************__** 单击“检查更新”****。
延伸阅读
-
[AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph) -
[AUTOTITLE](/code-security/reference/supply-chain-security/troubleshoot-dependabot/vulnerable-dependency-detection)