Skip to main content

为 Dependabot 配置多生态系统更新

了解如何将 Dependabot 配置为跨不同生态系统对更新进行分组,以便你可以按组接收合并的拉取请求,而不是每个生态系统一个拉取请求。

谁可以使用此功能?

Users with write access

关于多生态系统更新

利用多生态系统更新,你可以创建跨多个包生态系统的组,并获取一个 Dependabot 拉取请求,其中包含所有受支持的生态系统中的更新。 此方法可帮助减少你收到的 Dependabot 拉取请求的数量,并简化依赖项更新工作流。

多生态系统更新尤其适用于:

  • 使用多种技术(Docker、Terraform、Python 脚本)的基础结构项目****。
  • 具有应一起更新的前端和后端依赖项的全堆栈应用程序****。
  • 需要跨语言同步协议版本的跨平台库****。

入门

应按照以下说明设置第一个多生态系统组。

1.将 multi-ecosystem-groups 添加到 .github/dependabot.yml 文件

首先,在顶级 multi-ecosystem-groups 部分中定义具有计划的组:

YAML
version: 2

multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"

updates:
  # Your existing package ecosystems will go here

2.将生态系统分配到具有模式的组

  1. 添加 multi-ecosystem-group 键。
  2. patterns 添加到包生态系统配置。
YAML
version: 2

multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"

updates:
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    multi-ecosystem-group: "infrastructure"
  
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"

重要

使用 multi-ecosystem-group 时需要键 patterns。 可以指定依赖项模式来仅包含组中的某些依赖项,或者使用 ["*"] 来包含所有依赖项。

3.提交并监视合并的拉取请求

将更改提交到 dependabot.yml 后,Dependabot 将:

  • 根据组的计划检查更新
  • 根据组的计划检查更新。
  • 创建包含组中指定的所有生态系统更新的单个拉取请求。
  • 使用分支名称和拉取请求标题中的组标识符。

4.使用其他键进行自定义(可选)

assigneeslabels 和其他设置添加到组中:

YAML
multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"
    assignees: ["@platform-team"]
    labels: ["infrastructure", "dependencies"]

updates:
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    multi-ecosystem-group: "infrastructure"
  
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"

多生态系统特定配置

多生态系统更新使用两级配置结构,可提供灵活性并支持控制更新的分组和管理方式:

  • 组级别 (multi-ecosystem-groups):可在此级别定义应用于组中所有包生态系统的总体组行为、计划和共享设置。
  • 生态系统级别 (updates):在组中配置单个包管理器,包括要包括哪些依赖项和特定于生态系统的设置。

此结构允许你在组级别设置一致的策略,同时保持对单个包生态系统的精细控制。

multi-ecosystem-groups

定义跨多个包生态系统的组。 每个组都需要:

  • 组标识符:在分支名称和拉取请求标题中使用。
  • 计划:检查更新的频率。 请参阅所有可用选项的计划

multi-ecosystem-group

将包生态系统分配给多生态系统组。 需要 patterns 键来指定要包含的依赖项。

有关 patterns 的详细信息,请参阅 patternsexclude-patterns

其他配置选项

所有标准 Dependabot 配置选项都可用于多生态系统组。 请参阅“Dependabot 选项参考”中的package-ecosystemdirectoryallowignoreregistries

键配置

使用多生态系统组时,键在两个级别进行配置。 下面是可在哪些位置使用哪些键的完整细分:

组级别 (multi-ecosystem-groups)

下表显示了组级别可用的配置键及其行为类型。 有关详细信息,请参阅配置行为

密钥必须行为
schedule不适用
labels累加性
milestone仅限组
assignees累加性
target-branch仅限组
commit-message仅限组
pull-request-branch-name仅限组

生态系统级别 (updates)

下表显示了生态系统级别可用的配置键及其行为类型。 有关详细信息,请参阅配置行为

密钥必须行为
package-ecosystem不适用
directory / directories不适用
patterns不适用
allow不适用
ignore不适用
registries不适用
vendor不适用
versioning-strategy不适用
update-types不适用
labels累加性
assignees累加性

配置行为

累加键

累加键合并组级别和单个生态系统级别的值,而不是一个值覆盖另一个值。 这样就可以在组级别设置一致的团队范围配置,同时在单个级别添加特定的生态系统专业知识。

  • assignees - 同时分配了组和生态系统级别的所有被分派人
  • labels - 同时应用了组级别和生态系统级别的所有标签

下表显示了 Dependabot 如何合并来自 Docker 拉取请求的组级别和生态系统级别的值,如下例所示:

选项组级别值生态系统级别值Result
assignees@platform-team@security-lead@docker-admin@platform-team, @security-lead, @docker-admin
labelsinfrastructuredependenciesdocker, containersinfrastructuredependenciesdockercontainers
YAML
multi-ecosystem-groups:
  infrastructure:
    assignees: ["@platform-team", "@security-lead"]
    labels: ["infrastructure", "dependencies"]

updates:
  - package-ecosystem: "docker"
    assignees: ["@docker-admin"]
    labels: ["docker", "containers"]
    multi-ecosystem-group: "infrastructure"

仅限组的键

  • milestone - 整数里程碑号
  • commit-message - 提交消息模板
  • target-branch - 拉取请求的目标分支
  • pull-request-branch-name - 分支命名配置

警告

如果尝试在生态系统级别(在 updates 条目中)设置仅限组的键,Dependabot 将引发配置错误并且无法处理 dependabot.yml 文件。 这些键只能在 multi-ecosystem-groups 部分中指定。

示例:

下表显示了 Dependabot 如何合并来自 Docker 拉取请求的组级别和生态系统级别的值,如下例所示:

选项组级别值生态系统级别值Result
assignees@platform-team@docker-admin@platform-team@docker-admin
labelsinfrastructuredocker, containersinfrastructuredockercontainers
YAML
multi-ecosystem-groups:
  infrastructure:
    assignees: ["@platform-team"]
    labels: ["infrastructure"]

updates:
  - package-ecosystem: "docker"
    assignees: ["@docker-admin"]
    labels: ["docker", "containers"]
    multi-ecosystem-group: "infrastructure"

用例和示例

对于使用多个包管理器并希望协调它们之间的更新的项目,多生态系统更新特别有用。 下面是常见方案:

基础结构项目

方案:基础结构代码使用多种技术 - Docker 容器、用于云资源的 Terraform 和用于自动化的 Python 脚本。 你希望所有与基础结构相关的更新组合在一起,以便更轻松地进行评审和部署协调。

为什么将它们组合在一起:基础结构更改通常需要一起部署,并且为每个技术创建单独的 PR 会产生协调开销。

YAML
multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"  # Weekly updates to avoid disruption

updates:
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    multi-ecosystem-group: "infrastructure"
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"
  - package-ecosystem: "pip"
    directory: "/"
    patterns: ["boto3", "requests", "pyyaml"]
    multi-ecosystem-group: "infrastructure"

结果:一个每周拉取请求,其中包含基础结构自动化中使用的 Docker 映像、Terraform 提供程序和 Python 依赖项的更新。

完全堆栈应用程序

方案:你有一个具有 React 前端和 Rails 后端的 Web 应用程序。 你希望前端和后端依赖项一起更新,以确保兼容性并简化测试。

为什么将它们组合在一起:前端和后端通常相互依赖,将它们一起更新可确保一次性测试完整的应用程序堆栈。

YAML
multi-ecosystem-groups:
  app-dependencies:
    schedule:
      interval: "daily"  # More frequent updates for application code

updates:
  - package-ecosystem: "npm"
    directory: "/frontend"
    patterns: ["react", "lodash", "@types/*"]  # Core frontend libraries and TypeScript types
    multi-ecosystem-group: "app-dependencies"
  - package-ecosystem: "bundler"
    directory: "/backend"
    patterns: ["rails", "pg", "sidekiq"]  # Core backend framework and database
    multi-ecosystem-group: "app-dependencies"

结果:每日 PR,包含前端 JavaScript/TypeScript 更新和后端 Ruby gem 更新,使你能够一起测试完整的应用程序。

跨平台库

方案:你要构建跨不同语言使用相同协议(如 gRPC 和协议缓冲区)的库或服务。 你希望使库版本在所有实现之间保持同步。

为什么将它们组合在一起:协议库需要在不同的语言实现之间保持兼容,因此将它们一起更新可防止版本不匹配。

YAML
multi-ecosystem-groups:
  grpc-and-protobuf:
    schedule:
      interval: "daily"

updates:
  - package-ecosystem: "bundler"
    directory: "/grpc-proto-test/"
    patterns: ["grpc", "google-protobuf"]
    multi-ecosystem-group: "grpc-and-protobuf"
  - package-ecosystem: "npm"
    directory: "/grpc-proto-test/"
    patterns: ["@grpc/grpc-js", "google-protobuf"]
    multi-ecosystem-group: "grpc-and-protobuf"

结果:每日 PR,确保 Ruby 和 Node.js gRPC 库保持同步,从而防止协议兼容性问题。

高级配置示例

此综合示例演示复杂项目如何使用具有不同更新策略和密钥合并的多个组:

YAML
version: 2

multi-ecosystem-groups:
  infrastructure:
    schedule:
      interval: "weekly"
    assignees: ["@platform-team"]           # assign platform team
    labels: ["infrastructure", "dependencies"]
    milestone: 10                           # Track in milestone
    commit-message:
      prefix: "infra"
      include: "scope"
  
  # Application code updates - daily, with development team
  full-stack:
    schedule:
      interval: "daily"
    assignees: ["@full-stack-team"]         # assign to full-stack team
    labels: ["full-stack"]

updates:
  # Docker images - infrastructure group with additional docker expertise
  - package-ecosystem: "docker"
    directory: "/"
    patterns: ["nginx", "redis", "postgres"]
    assignees: ["@docker-admin"]            # adds to @platform-team (additive)
    labels: ["docker"]                      # adds to infrastructure, dependencies (additive)
    multi-ecosystem-group: "infrastructure"
  
  # Terraform - infrastructure group with terraform specialists
  - package-ecosystem: "terraform"
    directory: "/"
    patterns: ["aws", "terraform-*"]
    multi-ecosystem-group: "infrastructure"
    
  # Frontend - full-stack group with frontend focus
  - package-ecosystem: "npm"
    directory: "/frontend"
    patterns: ["react", "lodash", "@types/*"]
    labels: ["frontend"]                    # adds to full-stack (additive)
    multi-ecosystem-group: "full-stack"
    
  # Backend - full-stack group with backend specialist
  - package-ecosystem: "bundler"
    directory: "/backend"
    patterns: ["rails", "pg", "sidekiq"]
    assignees: ["@backend-dev"]             # adds to @full-stack-team (additive)
    multi-ecosystem-group: "full-stack"

此配置的工作原理

基础结构 PR

  • schedule: weekly
选项组级别值生态系统级别值Result
assignees@platform-team@docker-admin (Docker)、@terraform-experts (Terraform)全部组合
labelsinfrastructuredependenciesdocker (Docker)全部组合
scheduleweekly每周更新
milestone10在里程碑 10 中跟踪

完整堆栈 PR

  • schedule: daily
选项组级别值生态系统级别值Result
assignees@full-stack-team@backend-dev(后端)全部组合
labelsfull-stackfrontend(前端)全部组合
scheduledaily更新频率增加

此方法可确保适当人员参与每种类型的更新,同时跨相关技术保持一致的策略。

最佳做法

  • 组相关依赖项:仅限逻辑上应归属在一起的组生态系统。
  • 使用描述性标识符:选择明确指示组用途的组名称。

其他阅读材料