关于多生态系统更新
利用多生态系统更新,你可以创建跨多个包生态系统的组,并获取一个 Dependabot 拉取请求,其中包含所有受支持的生态系统中的更新。 此方法可帮助减少你收到的 Dependabot 拉取请求的数量,并简化依赖项更新工作流。
多生态系统更新尤其适用于:
- 使用多种技术(Docker、Terraform、Python 脚本)的基础结构项目****。
- 具有应一起更新的前端和后端依赖项的全堆栈应用程序****。
- 需要跨语言同步协议版本的跨平台库****。
入门
应按照以下说明设置第一个多生态系统组。
1.将 multi-ecosystem-groups
添加到 .github/dependabot.yml
文件
首先,在顶级 multi-ecosystem-groups
部分中定义具有计划的组:
version: 2 multi-ecosystem-groups: infrastructure: schedule: interval: "weekly" updates: # Your existing package ecosystems will go here
version: 2
multi-ecosystem-groups:
infrastructure:
schedule:
interval: "weekly"
updates:
# Your existing package ecosystems will go here
2.将生态系统分配到具有模式的组
- 添加
multi-ecosystem-group
键。 - 将
patterns
添加到包生态系统配置。
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"
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.使用其他键进行自定义(可选)
将 assignees
、labels
和其他设置添加到组中:
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:
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
的详细信息,请参阅 patterns
和 exclude-patterns
。
其他配置选项
所有标准 Dependabot 配置选项都可用于多生态系统组。 请参阅“Dependabot 选项参考”中的package-ecosystem
、directory
、allow
、ignore
和 registries
。
键配置
使用多生态系统组时,键在两个级别进行配置。 下面是可在哪些位置使用哪些键的完整细分:
组级别 (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 |
labels | infrastructure 、dependencies | docker , containers | infrastructure 、dependencies 、docker 、containers |
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"
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 |
labels | infrastructure | docker , containers | infrastructure 、docker 、containers |
multi-ecosystem-groups: infrastructure: assignees: ["@platform-team"] labels: ["infrastructure"] updates: - package-ecosystem: "docker" assignees: ["@docker-admin"] labels: ["docker", "containers"] multi-ecosystem-group: "infrastructure"
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 会产生协调开销。
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"
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 应用程序。 你希望前端和后端依赖项一起更新,以确保兼容性并简化测试。
为什么将它们组合在一起:前端和后端通常相互依赖,将它们一起更新可确保一次性测试完整的应用程序堆栈。
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"
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 和协议缓冲区)的库或服务。 你希望使库版本在所有实现之间保持同步。
为什么将它们组合在一起:协议库需要在不同的语言实现之间保持兼容,因此将它们一起更新可防止版本不匹配。
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"
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 库保持同步,从而防止协议兼容性问题。
高级配置示例
此综合示例演示复杂项目如何使用具有不同更新策略和密钥合并的多个组:
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"
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) | 全部组合 |
labels | infrastructure 、dependencies | docker (Docker) | 全部组合 |
schedule | weekly | 无 | 每周更新 |
milestone | 10 | 无 | 在里程碑 10 中跟踪 |
完整堆栈 PR
schedule: daily
选项 | 组级别值 | 生态系统级别值 | Result |
---|---|---|---|
assignees | @full-stack-team | @backend-dev (后端) | 全部组合 |
labels | full-stack | frontend (前端) | 全部组合 |
schedule | daily | 无 | 更新频率增加 |
此方法可确保适当人员参与每种类型的更新,同时跨相关技术保持一致的策略。
最佳做法
- 组相关依赖项:仅限逻辑上应归属在一起的组生态系统。
- 使用描述性标识符:选择明确指示组用途的组名称。