Chef/贡献
目录
对 OpenStack Chef Cookbooks 的贡献
请参阅此博客文章,了解如何为 OpenStack Chef cookbooks 做出贡献并推送代码。更多详细信息请参阅:https://docs.openstack.org/infra/manual/developers.html
如何创建新的 cookbook:https://wiki.openstack.org/wiki/Chef/Contributing/NewCookbook
提交消息指南
请尝试使提交消息有用。在您第一次推送代码之前,请阅读这篇优秀的博客文章,以及OpenStack 项目的标准提交消息指南。
cookbooks 项目和 cookbook 测试仓库完全支持使用Depends-On 支持进行交叉依赖。此支持主要来自 Common cookbook 的 bootstrap.sh 文件,该文件使用 zuul-cloner 将其他 cookbook 依赖克隆到 jenkins gate 工作区:/home/jenkins/workspace/openstack-cookbook-xxxxx。对于 cookbooks,bootstrap.sh 会自动调整 Berksfile 以在该本地路径中查找这些依赖项。对于测试仓库,Berksfile 已经支持一个标志 REPO_DEV=On,它使其能够搜索本地路径中的 cookbooks。
要使用 Depends-On 支持,只需将依赖补丁的 gerrit Change-Id 添加到您的提交消息中。使用完整的 Change-Id('I' + 40 个字符)。例如:
commit ae878fc8b9761d099a4145617e4a48cbeb390623 Author: [removed] Date: Fri Jun 26 01:44:02 2015 +0000 The commit message short title line The description of the patch with all the details one could ever hope for and maybe even words of wisdom on how to actually use it. * something on interest * more stuff Blueprint my-very-important-freature Depends-on: I4e1cb4f1caaee61683dc9fb0ffc67e8f9e06dc65 for cookbook-common Depends-on: I321cb4f1caaee61683dc9fb0ffc67e8f9e06dc11 for cookbook-identity Change-Id: I2072f93ad6c889d534b04009671147af653048e7
蓝图指南
如果您想更改一些不能或不应该只在一个提交中更改或影响多个 cookbooks 的内容,请继续为“OpenStack + Chef”注册蓝图。阅读此关于蓝图的维基页面后,您基本上可以继续遵循所有 openstack-cookbooks 的这些步骤。
- 用一些词语写下基本想法。
- 用一些句子详细说明您认为如何将您的想法集成到 cookbooks 中以及为什么它很重要。
- 创建“工作项”列表,包括您的想法应该应用于的所有 cookbooks 以及您认为最佳的顺序。
- 也许可以与irc频道 #openstack-chef 中的人员核对,以完善上述内容。
如果您认为您的想法涉及到所有 cookbooks,请继续复制此完整的 openstack-cookbooks 列表,以避免在此过程中遗漏一个
cookbook-openstack-block-storage: TODO
cookbook-openstack-common: TODO
cookbook-openstack-compute: TODO
cookbook-openstack-dashboard: TODO
cookbook-openstack-database: TODO
cookbook-openstack-data-processing: TODO
cookbook-openstack-identity: TODO
cookbook-openstack-image: TODO
cookbook-openstack-network: TODO
cookbook-openstack-object-storage: TODO
cookbook-openstack-ops-database: TODO
cookbook-openstack-ops-messaging: TODO
cookbook-openstack-orchestration: TODO
cookbook-openstack-telemetry: TODO
cookbook-openstack-integration-test: TODO
openstack-chef-repo: TODO
代码审查员指南
以下是Gerrit Review 网站上代码审查员的一些简单规则
规则 #1:切勿 +1/+2R 或 +1A 您自己的补丁。
规则 #2:所有补丁必须有符合OpenStack 项目标准提交消息指南的提交消息。如果提交消息不符合这些指南,则核心审查员不应 +1A。
规则 #3:如果补丁不仅仅是风格或拼写错误修复,它需要至少 2 名核心审查员在审查中添加 +2R,然后任何核心审查员才能 +1A 审查。
规则 #4:如果补丁以向后不兼容的方式更改了任何 cookbook 的现有行为,则补丁集中必须包含 cookbook 的 metadata.rb 中版本的相应递增。否则,核心审查员不应 +1A。
规则 #5:如果补丁添加了额外功能到库 cookbook,则补丁应附带 metadata.rb 文件中版本号的相应递增。否则,核心审查员不应 +1A。
版本更改指南
提交 cookbook 补丁时,通常要求以反映更改级别的方式增加版本号(在 metadata.rb 中)。任何补丁还应更新 CHANGELOG.md,并且如果适用,README.md 应反映更改和任何相关的操作说明。CHANGELOG.md 是我们更改的执行摘要,它应该以快速的方式告知更改内容。
主分支和稳定分支上的补丁开发之间存在一些差异。对稳定分支上的更改进行更严格和更严格的监督。主分支是前沿的,在某些简单情况下可以放宽版本要求,以提高生产力。
语义化版本控制
这些 cookbooks 使用语义化版本控制系统。该系统使用三部分版本号:Major.Minor.Patch。例如:9.2.33
开发分支中的主版本号不应更改。它将反映基本 OpenStack 版本的字母顺序编号,OpenStack 版本。例如,Icehouse 是第 9 个字母和第 9 个版本,所有稳定 cookbook 都将是 9.Y.Z。当主分支稳定后,将从它创建一个新的稳定分支,并且主分支中的主版本号将由核心团队递增。
次版本号和补丁版本号将按以下特定于分支的部分所述递增。
稳定分支
为 Openstack+Chef 创建稳定分支,这里是说明。
有关将补丁挑选到稳定分支的信息,请参阅https://wiki.openstack.org/wiki/StableBranch#Gerrit。在大多数情况下,Changelog 和 metadata.rb 也需要随着补丁级别的递增而更新。然后,在补丁合并后,请考虑更新https://github.com/openstack/openstack-chef-repo以拉取您的更改。Changelog、Berksfile 和 lock 将需要更新。
稳定分支 cookbooks 必须完全利用语义化版本控制系统。所有补丁必须至少更新 metadata.rb 和 CHANGELOG.md。所有补丁都应尽量向后兼容。
| 稳定分支示例情况 | 更改级别 |
|---|---|
| 添加一个食谱 | 递增次版本号 |
| 添加一个函数或方法 | 递增次版本号 |
| 更改 Gemfile 或 Berksfile | 递增次版本号 |
| 从主分支回溯修复 | 递增次版本号 |
| 为配置文件中的值添加属性,具有相同的默认值 | 递增补丁版本号 |
| 更改资源选项 | 递增补丁版本号 |
| 添加一个测试 | 递增补丁版本号 |
| 修复损坏的配方 | 递增补丁版本号 |
| 重构配方或测试 | 递增补丁版本号 |
上表显示了补丁引入的不同级别更改的一些示例,以及稳定分支的版本号要递增的部分。
版本锁定
稳定分支也通过向每个 cookbook 添加 Berksfile.lock 和 Gemfile.lock 来锁定。如果对 Gemfile 进行了任何更改,Gemfile.lock 也必须更新。如果任何更改依赖于其他 cookbook 更改,则 Berkfile.lock 和 metadata.rb 文件需要相应更新。
Cookbook 依赖
当更改需要命中多个 cookbook 时,例如向 Common 添加属性时,metadata.rb 文件需要更新以反映所需的版本级别。Berksfile.lock 也需要更新,其中包含依赖更改的提交 ID。
主分支
主 cookbook 应轻微利用语义化版本控制系统。我们认为主分支是一个快速的“进行中工作”,直到我们到达发布候选版本 1 (RC-1) 日期。这意味着它将处于快速活跃的开发中,版本控制并非总是必需的。所有补丁必须至少更新 CHANGELOG.md。
| 主分支示例情况 | 更改级别 |
|---|---|
| 为新的稳定分支分支 | 递增主版本号 |
| 添加一个食谱 | 递增次版本号 |
| 添加一个函数或方法 | 递增次版本号 |
| 更改 Gemfile 或 Berksfile | 递增次版本号 |
| 为配置文件中的值添加属性,具有相同的默认值 | 递增补丁版本号** |
| 更改资源选项 | 递增补丁版本号** |
| 添加一个测试 | 递增补丁版本号** |
| 修复损坏的配方 | 递增补丁版本号** |
| 重构配方或测试 | 递增补丁版本号** |
上表显示了补丁引入的不同级别更改的一些示例,以及主分支的版本号要递增的部分。
** 在某些情况下,无需增加补丁版本号,只需更新 CHANGELOG.md。为了避免补丁版本号更改时发生 re-base 冲突并允许更快的开发,如果更改符合这些指南,则无需增加补丁版本。
- 当更改仅影响单个 cookbook 时
- 当更改只是为模板简单添加一个新属性,并且不需要其他逻辑更改时
- 当补丁只影响测试时
- 当补丁只影响 README 或其他注释时
版本锁定
主分支未通过 Berksfile.lock 或 Gemfile.lock 锁定。可以直接对 Berksfile 和 Gemfile 进行更改。
Cookbook 依赖
当更改需要命中多个 cookbook 时,例如向 Common 添加属性时,metadata.rb 文件需要更新以反映所需的版本级别。
Gate 作业
OpenStack Chef cookbooks 使用 infra gate jobs 来检查和验证所有补丁。对于 master 分支,使用的 gate 是:gate-{name}-chef-rake,其中 name 是其中一个 cookbook 的名称。此 rake job 使用一个位于 cookbook-openstack-common 项目中的通用/共享引导脚本。在其他 cookbooks 中,您会注意到它们的引导脚本只是简单地加载和使用通用脚本。
引导脚本将通过安装 ChefDK 来设置开发测试环境。测试所需的所有 Ruby gem 都来自 ChefDK 包,我们不再使用 Gemfile 或 Bundler。rake gate job 将简单地执行每个 cookbook 中位于的 Rakefile。
Rakefiles 默认会运行三个测试,使用 chef exec rake test
- 单元测试 - RSpec
- 代码检查 - FoodCritic
- 代码风格 - RuboCop
有关测试 cookbook 补丁的更多详细信息,请参阅每个 cookbook 中的 TESTING.md 文件。
核心评审员
要成为 OpenStack Chef 项目的核心审查员,您应该
- 参加所有/大部分 IRC 会议
- 通过 IRC 可用
- 具备足够的审查和贡献知识和经验
- 申请成为核心成员或被提名并愿意
- 承认(指南)
最后,您应该在 specs 仓库的 MAINTAINER 文件中提交成为核心成员的审查(https://github.com/openstack/openstack-chef-specs),并获得其他核心成员所需的 +2s
返回入门页面