# Dependabot 错误

Dependabot 自动维护依赖项，使代码安全且保持最新。 此参考可帮助你诊断和解决问题，以便自动更新可以继续。

更新依赖项时遇到错误时 Dependabot ，可以使用此引用来诊断和修复常见问题。

## 如何查看错误

### 安全更新错误

当Dependabot被阻止创建拉取请求以修复Dependabot警报时，会在警报上发布错误消息。 该 Dependabot alerts 视图显示尚未解决的任何警报的列表。 若要访问警报视图，请单击**Dependabot alerts\*\*\*\*<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-shield" aria-label="shield" role="img"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> Security and quality** 存储库的选项卡。 如果旨在修复有漏洞依赖项的拉取请求已生成，则警报将包括指向该拉取请求的链接。

![Dependabot alerts 视图的屏幕截图。 在一个警报的右侧，标题为“#353”的拉取请求链接用橙色框出。](/assets/images/help/dependabot/dependabot-alert-pr-link.png)

出于多种原因，警报可能没有拉取请求链接：

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

若要查看错误详细信息，请单击警报。

### 版本更新错误

当Dependabot被阻止创建拉取请求以更新生态系统中的依赖项时，可以查看作业日志列表以了解有关错误的详细信息。

可从存储库的依赖项关系图访问作业日志列表。 在依赖项关系图中，单击 **Dependabot** 选项卡，然后单击受影响清单文件右侧，单击“**最近更新作业**”。

若要查看特定作业的完整日志文件，请在感兴趣的日志条目右侧单击 **“查看日志**”。

![清单文件的 Dependabot 作业日志项目的屏幕截图。 名为“View logs”的按钮以深橙色边框突出显示。](/assets/images/help/dependabot/dependabot-job-log-error-message.png)

有关详细信息，请参阅“[查看 Dependabot 作业日志](/zh/code-security/dependabot/troubleshooting-dependabot/viewing-dependabot-job-logs)”。

## 依赖项解析错误

### 无法将 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`）上有一个可传递依赖项。

```shell
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 注释命令的更多信息，请参阅 [管理依赖项更新的所有拉取请求](/zh/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates#managing-dependabot-pull-requests-with-comment-commands)。

### 无法更新到所需版本，因为已存在对最新版本的打开拉取请求

```
          **适用于：** 仅限安全更新

          **错误信息：**`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 对于某个依赖项的特定版本是否存在漏洞不一致时，您可能会看到此错误。

          **分辨率：** 首先检查存储库的依赖项关系图，查看它检测到的依赖项版本，并检查标识的版本是否与存储库中使用的版本匹配。
```

如果怀疑依赖项关系图数据过期，可能需要手动更新存储库的依赖项关系图，或需要进一步调查依赖项信息。 请参阅“[依赖关系图疑难排解](/zh/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph)”。

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

## 拉取请求错误

### 已达到拉取请求限制

```
          **错误信息：**`Dependabot cannot open any more pull requests`
```

打开拉取请求 Dependabot 的数量是有限制的。 如果达到此限制，将无法打开新的拉取请求，并报告此错误。

```
          **限制：**
```

* 安全更新拉取请求：10
* 版本更新拉取请求：5（可使用 `open-pull-requests-limit` 配置）

安全性和版本更新拉取请求有各自的限制，因此打开版本更新拉取请求不会阻止安全更新拉取请求的创建。 有关详细信息，请参阅“[Dependabot 选项参考](/zh/code-security/dependabot/working-with-dependabot/dependabot-options-reference#open-pull-requests-limit-)”。

```
          **分辨率：** 合并或关闭某些现有拉取请求，并手动触发新的拉取请求。 请参阅 [手动触发 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` 时，会发生这种情况。
```

```yaml copy
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 将：

1. 查看依赖项列表，并将工作限制为仅在 `production` 中使用的依赖项。
2. 尝试创建名为 `development-dependencies` 的组，即此缩减列表的子集。
3. 由于步骤 1 中删除了所有 `development-dependencies` 依赖项，因此 `development` 组为空。
4. ```
          **单独**更新不在组中的所有依赖项。 由于生产中的依赖项组为空， Dependabot 将忽略该组，并为每个依赖项创建单独的拉取请求。

          **分辨率：** 确保配置设置不会彼此取消，并在配置文件中相应地更新它们。 要排查问题，请查看日志。 有关访问清单日志的信息，请参阅 [“如何查看错误](#how-to-view-errors)”。
   ```

有关如何配置 Dependabot version updates组的详细信息，请参阅 [Dependabot 选项参考](/zh/code-security/dependabot/working-with-dependabot/dependabot-options-reference#groups--)。

### 无法对依赖项进行分组（安全更新）

```
          **适用于：** 仅限安全更新

          **错误信息：**`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 安全更新](/zh/code-security/dependabot/dependabot-security-updates/about-dependabot-security-updates#about-grouped-security-updates) 和 [自定义 Dependabot 安全更新的拉取请求](/zh/code-security/dependabot/dependabot-security-updates/customizing-dependabot-security-prs)。

### 无法在分组拉取请求中更新依赖项

```
          **错误信息：**`Dependabot fails to update one of the dependencies in a grouped pull request`
```

对于失败的版本更新和失败的安全更新，你可以使用不同的故障排除技术。

#### 版本更新

```
          **适用于：** 仅限版本更新

          Dependabot 将在日志中以及日志末尾的作业摘要中显示失败的更新。

          **解决方法：**
```

1. 在拉取请求的注释中使用`@dependabot recreate`来重新构建组。 请参阅“[管理依赖项更新的所有拉取请求](/zh/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates#managing-dependabot-pull-requests-with-comment-commands)”。
2. 如果依赖项仍然无法更新，请使用 `exclude-patterns` 配置，以便从组中排除依赖项。
   Dependabot 然后，将引发单独的拉取请求来更新依赖项。
3. 如果依赖项仍然无法更新，则依赖项本身或 Dependabot 特定生态系统可能存在问题。

如果要忽略依赖项的更新，必须执行下列操作之一。

* 为 `ignore` 文件中的依赖关系配置 `dependabot.yml` 规则。 有关详细信息，请参阅“[Dependabot 选项参考](/zh/code-security/dependabot/working-with-dependabot/dependabot-options-reference#ignore--)”。
* 对分组更新的拉取请求中的依赖关系使用 `@dependabot ignore` 注释命令。 有关详细信息，请参阅“[管理依赖项更新的所有拉取请求](/zh/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates#managing-dependabot-pull-requests-for-grouped-updates-with-comment-commands)”。

#### 安全更新

```
          **适用于：** 仅限安全更新
```

如果针对安全更新的分组拉取请求失败或无法合并，请手动创建拉取请求，以升级到重大变更的版本。 手动更新分组拉取请求中包含的包时，将重新设置拉取请求的基数， Dependabot 使其不包含手动更新的包。

如果要忽略依赖项的更新，必须执行下列操作之一。

* 为 `ignore` 文件中的依赖关系配置 `dependabot.yml` 规则。 有关详细信息，请参阅“[Dependabot 选项参考](/zh/code-security/dependabot/working-with-dependabot/dependabot-options-reference#ignore--)”。
* 对分组更新的拉取请求中的依赖关系使用 `@dependabot ignore` 注释命令。 有关详细信息，请参阅“[管理依赖项更新的所有拉取请求](/zh/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates#managing-dependabot-pull-requests-for-grouped-updates-with-comment-commands)”。

### 分组拉取请求导致持续集成失败

```
          **适用于：** 仅限版本更新

          **错误信息：**`Continuous integration (CI) fails on my grouped pull request`

          **解决方法：**
```

如果失败是由于单个依赖项造成的，请使用 `exclude-patterns` 配置，以便从组中排除依赖项。
Dependabot 然后，将引发单独的拉取请求来更新依赖项。

如果要忽略依赖项的更新，必须执行下列操作之一。

* 为 `ignore` 文件中的依赖关系配置 `dependabot.yml` 规则。 有关详细信息，请参阅“[Dependabot 选项参考](/zh/code-security/dependabot/working-with-dependabot/dependabot-options-reference#ignore--)”。
* 对分组更新的拉取请求中的依赖关系使用 `@dependabot ignore` 注释命令。 有关详细信息，请参阅“[管理依赖项更新的所有拉取请求](/zh/code-security/dependabot/working-with-dependabot/managing-pull-requests-for-dependency-updates#managing-dependabot-pull-requests-for-grouped-updates-with-comment-commands)”。

如果继续看到 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-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。 单击“检查更新”****。
```

## 延伸阅读

* [依赖关系图疑难排解](/zh/code-security/supply-chain-security/understanding-your-software-supply-chain/troubleshooting-the-dependency-graph)
* [脆弱性依赖检测](/zh/code-security/reference/supply-chain-security/troubleshoot-dependabot/vulnerable-dependency-detection)