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 群组上也有多个评论。