Skip to main content

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

优化 Dependabot 版本更新的拉取请求创建

了解如何简化和高效地管理 Dependabot 拉取请求。

谁可以使用此功能?

Users with write access

默认情况下, Dependabot 打开一个新的拉取请求来更新每个依赖项。 启用安全更新后,发现易受攻击的依赖项时,就会打开新的拉取请求。 为一个或多个生态系统配置版本更新后,当有新版本的依赖项可用时,就会按照 dependabot.yml 文件中定义的频率打开新的拉取请求。

如果你的项目有很多依赖项,你可能会发现有大量的 Dependabot 拉取请求需要查看和合并,而且这很快就会变得难以管理。

可以通过几个自定义选项来优化 Dependabot 更新拉取请求以与流程保持一致,例如:

  • 控制Dependabot检查您的依赖项新版本的频率schedule
  •         **
            **。
    

控制依赖项更新的频率和时间

          Dependabot 会按照您在配置文件中设定的频率进行版本更新检查,其中必填字段必须设置为 `daily`、`weekly`、`monthly`、`quarterly`、`semiannually`、`yearly` 或 `cron`(见 [`cronjob`](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#cronjob))。

默认情况下, Dependabot 通过分配随机时间来检查和引发依赖项更新的拉取请求来平衡其工作负荷。

但是,为了减少干扰,或者为了更好地安排时间和资源来审阅和处理版本更新,你可能会发现修改频率和时间很有用。 例如,你可能更希望 Dependabot 每周运行一次更新检查,而非每日运行,并确保这些操作是在团队会审会话之前提交拉取请求的时间进行。

修改依赖项更新的频率和时间

可以通过结合使用 schedule 选项来修改 Dependabot 检查版本更新的频率和时间。

          `dependabot.yml`以下示例文件将更改 npm 配置,以指定应在Dependabot星期二 02:00 日本标准时间(UTC +09:00)检查 npm 依赖项的版本更新。
YAML
# `dependabot.yml` file with
# customized schedule for version updates

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    # Check the npm registry every week on Tuesday at 02:00 Japan Standard Time (UTC +09:00)
    schedule:
      interval: "weekly"
      day: "tuesday"
      time: "02:00"
      timezone: "Asia/Tokyo"

另请参阅计划

优先处理有意义的更新

你可以使用 groups 将多个依赖项的更新合并到单个拉取请求中。 这有助于将审阅时间集中在高风险更新上,并最大限度地减少审阅次要版本更新所花费的时间。 例如,你可以将开发依赖项的次要更新或补丁更新合并到单个拉取请求中,并为影响代码库关键区域的安全更新或版本更新设置一个专用组。

必须为每个包生态系统配置组,然后可以使用标准组合为每个包生态系统创建多个组:

  •         Dependabot 更新类型: `applies-to`
    
  • 依赖项类型:dependency-type
  • 依赖项名称:patternsexclude-patterns
  • 语义版本控制级别:update-types

若要查看每个标准支持的所有值,请参阅groups

以下示例介绍了使用标准来创建依赖项组的几种不同方法。

示例 1:三个版本更新组

在本示例中,dependabot.yml 文件:

  • 创建名为 production-dependenciesdevelopment-dependenciesrubocop 的三个组。
  • 使用 patternsdependency-type 将依赖项包含在组中。
  • 使用 exclude-patterns 将一个(或多个)依赖项排除在组外。
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      production-dependencies:
        dependency-type: "production"
      development-dependencies:
        dependency-type: "development"
        exclude-patterns:
          - "rubocop*"
      rubocop:
        patterns:
          - "rubocop*"

因此:

  • 版本更新按依赖项类型分组。
  • 与模式 rubocop* 匹配的开发依赖项将排除在 development-dependencies 组外。
  • 相反,与 rubocop* 匹配的开发依赖项将包含在 rubocop 组中。 由于排序的原因,与 rubocop* 匹配的生产依赖项将包含在 production-dependencies 组中。
  • 此外,由于没有 applies-to 键,所有组默认仅适用于版本更新。

示例 2:包含排除依赖项的分组更新

在本示例中,dependabot.yml 文件:

  • 创建名为“support-dependencies”的组,作为自定义 Bundler 配置的一部分。
  • 使用与一个(或多个)依赖项的名称匹配的 patterns 将依赖项包含在组中。
  • 使用与一个(或多个)依赖项的名称匹配的 exclude-patterns 将依赖项排除在组外。
  • 由于使用了 applies-to: version-updates,分组仅适用于版本更新。
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directories:
      - "/frontend"
      - "/backend"
      - "/admin"

    schedule:
      interval: "weekly"
    # Create a group of dependencies to be updated together in one pull request
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      support-dependencies:
        # Define patterns to include dependencies in the group (based on
        # dependency name)
        applies-to: version-updates # Applies the group rule to version updates
        patterns:
          - "rubocop" # A single dependency name
          - "rspec*"  # A wildcard string that matches multiple dependency names
          - "*"       # A wildcard that matches all dependencies in the package
                      # ecosystem. Note: using "*" may open a large pull request
        # Define patterns to exclude dependencies from the group (based on
        # dependency name)
        exclude-patterns:
          - "gc_ruboconfig"
          - "gocardless-*"

因此:

  • 由于使用了通配符(“*”)模式,Bundler 的大部分依赖项都被合并到 support-dependencies 组中,除了
  • gc_ruboconfiggocardless-* 匹配的依赖项排除在组外,Dependabot 继续为这些依赖项提出单个拉取请求。 如果需要对这些依赖项的更新进行更仔细的审查,这将很有帮助。
  • 对于 support-dependencies,Dependabot 将仅为版本更新提出拉取请求。

示例 3:主要更新的单个拉取请求和次要/补丁更新的分组拉取请求

在本示例中,dependabot.yml 文件:

  • 创建名为“angular”的组。
  • 使用与依赖项的名称匹配的 patterns 将依赖项包含在组中。
  • 使用 update-type 仅将 minorpatch 更新包含在组中。
  • 由于使用了 applies-to: version-updates,分组仅适用于版本更新。
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"

因此:

  • Dependabot 将为具有次要或补丁更新的所有 Angular 依赖项创建分组拉取请求。
  • 所有主要更新都将继续作为单个拉取请求提出。

示例 4:次要/补丁更新的分组拉取请求和主要更新的无拉取请求

在本示例中,dependabot.yml 文件:

  • 创建名为 angularminor-and-patch 的两个组。
  • 使用 applies-to 使第一组仅适用于版本更新,第二组仅适用于安全更新。
  • 使用 update-type 仅包含这两个组的 minorpatch 更新。
  • 使用 ignore 条件排除 @angular* 包的 major 版本更新。
version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"
      minor-and-patch:
        applies-to: security-updates
        patterns:
          - "@angular*"
        update-types:
          - "patch"
          - "minor"
    ignore:
      - dependency-name: "@angular*"
        update-types: ["version-update:semver-major"]

因此:

  • Angular 依赖项的次要和补丁版本更新分组到单个拉取请求中。
  • Angular 依赖项的次要和补丁安全更新也分组到单个拉取请求中。
  • Dependabot 不会自动为 Angular 的主要更新打开拉取请求。