OpenStack Cookbook 版本控制方案¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/openstack-chef/+spec/example
关于 cookbook 版本控制方式已经有多个讨论。本文档旨在整合和组织,并理想情况下达成一些关于如何修改 cookbook(例如 common cookbook)版本的指南。
问题描述¶
我们目前没有 cookbook 版本控制的标准化。本文档旨在提供一些通用指南来解决这个问题。
提议的变更¶
通用指南¶
提交 cookbook 补丁时,通常要求在 metadata.rb 中递增版本号,以反映更改的级别。任何补丁都应更新 CHANGELOG.md,如果合适,README.md 也应反映更改和任何相关的操作说明。CHANGELOG.md 是我们对更改的执行摘要,应以快速的方式说明更改的内容。
在 Master 和 Stable 分支上进行补丁开发之间存在一些差异。对 Stable 分支上的更改进行更严格和更严格的审查。Master 分支是前沿的,在一些简单的情况下可以放宽版本要求,以提高生产力。
语义化版本控制¶
cookbook 使用语义化版本控制系统(参见 http://semver.org)。该系统使用三部分版本号:主版本号.次版本号.修订号。例如:9.2.33
主版本号在开发分支中不应更改。它将反映基于 OpenStack 版本的字母顺序,参见:https://wiki.openstack.org/wiki/Releases。例如,Icehouse 是第 9 个字母和第 9 个版本,所有稳定的 cookbook 的主版本号将为 9.Y.Z。当 Master 分支稳定时,将从其创建一个新的 Stable 分支,并且 Master 中的主版本号将由核心团队递增。
次版本号和修订号将根据以下分支特定部分中的描述进行递增。
Stable 分支¶
Stable 分支 cookbook 必须完全使用语义化版本控制系统。所有补丁都必须更新 metadata.rb 和 CHANGELOG.md。所有补丁都应尝试保持向后兼容。
Stable 分支示例情况 |
更改级别 |
|---|---|
添加一个 recipe |
递增次版本号 |
添加一个函数或方法 |
递增次版本号 |
更改 Gemfile 或 Berksfile |
递增次版本号 |
从 Master 分支移植一个修复 |
递增次版本号 |
添加配置文件的属性,其默认值相同 |
递增修订号 |
更改资源选项 |
递增修订号 |
添加一个测试 |
递增修订号 |
修复一个损坏的 recipe |
递增修订号 |
重构 recipe 或测试 |
递增修订号 |
上表显示了一些示例,说明了补丁引入的不同级别的更改以及 Stable 分支应递增版本号的哪一部分。
版本锁定¶
Stable 分支还通过在每个 cookbook 中添加 Berksfile.lock 和 Gemfile.lock 来锁定。如果对 Gemfile 进行任何更改,则 Gemfile.lock 也必须更新。如果任何更改依赖于其他 cookbook 的更改,则 Berksfile.lock 和 metadata.rb 文件也需要相应更新。
Cookbook 依赖项¶
当更改影响多个 cookbook 时,例如在 Common 中添加属性时,metadata.rb 文件需要更新以反映所需的版本级别。Berksfile.lock 也需要更新为依赖更改的提交 ID。
Master 分支¶
Master cookbook 应轻微使用语义化版本控制系统。我们将 master 分支视为一个快速发展中的“正在进行的工作”,直到我们达到 Release Candidate 1 日期 (RC-1)。这意味着它将处于快速主动开发中,版本控制并不总是必需的。所有补丁都至少应更新 CHANGELOG.md。
Master 分支示例情况 |
更改级别 |
|---|---|
为新的 Stable 分支创建分支 |
递增主版本号 |
添加一个 recipe |
递增次版本号 |
添加一个函数或方法 |
递增次版本号 |
更改 Gemfile 或 Berksfile |
递增次版本号 |
添加配置文件的属性,其默认值相同 |
递增修订号** |
更改资源选项 |
递增修订号** |
添加一个测试 |
递增修订号** |
修复一个损坏的 recipe |
递增修订号** |
重构 recipe 或测试 |
递增修订号** |
上表显示了一些示例,说明了补丁引入的不同级别的更改以及 Master 分支应递增版本号的哪一部分。
** 在某些情况下,递增修订号是不必要的,并且仅更新 CHANGELOG.md 即可。为了避免修订号更改上的重新基线冲突并允许更快的开发,如果更改符合这些准则,则不需要递增修订版本号。 - 当更改仅影响单个 cookbook 时 - 当更改只是简单地添加模板的新属性,并且不需要其他逻辑更改时 - 当补丁仅影响测试时 - 当补丁仅影响 README 或其他注释时
版本锁定¶
Master 分支不锁定 Berksfile.lock 或 Gemfile.lock。可以对 Berksfile 和 Gemfile 进行直接更改。
Cookbook 依赖项¶
当更改影响多个 cookbook 时,例如在 Common 中添加属性时,metadata.rb 文件需要更新以反映所需的版本级别。
依赖项¶
无,除了社区批准这些指南之外。
测试¶
无。
文档影响¶
参见上文,这也应该放在 wiki 上。
参考资料¶
这个 youtube 视频 是关于这个主题的主要讨论。Google 群组上也有多个评论。