无分支的Tempest¶
https://blueprints.launchpad.net/tempest/+spec/branchless-tempest
Tempest 历史上一直被视为核心服务,在 OpenStack 的每个发布周期都会切出一个 stable/foo 发布分支。然而,Tempest 主要是对 OpenStack API 的黑盒测试。API 由主要版本表示,而不是由发布标签表示,因此 Tempest 不需要分支。这种改变将产生许多有趣且级联的影响,所有这些都应该对项目的健康状况产生积极影响。
问题描述¶
Tempest 当前的发布方式是在 OpenStack 核心服务的每个发布周期创建一个 stable/foo 分支。这产生了一些副作用。
测试仅添加到 master 分支,很少回移植。完全有效的 stable/havana 测试已经丢失。
stable/havana 和 master 之间的行为可能会发生变化,因为它们之间运行的测试版本不同
持续集成/持续交付 (CD) 公有云应该针对 Tempest 的哪个版本进行测试?(即,发布对许多用户来说没有意义)
stable/havana 最终被用作 OpenStack 中支持的功能的全局标志。但这没有意义,因为大多数环境运行的是具有特定功能列表启用的配置,而不仅仅是我们 stable/havana 中发布的所有内容。
Tempest 有机地发展成为一种在我们的上游 gate 中工作非常好的工具,对于测试实际部署的人来说,效果中等。造成这种差异的原因之一是,我们使用 stable/foo Tempest 分支来对服务和 devstack 建立假设,而 devstack 设置 Tempest。打破这种便利关系将使我们更加严格地明确 Tempest 是一种旨在在任何设置环境中运行的工具。
提议的变更¶
在提议的无分支环境中,我们将执行以下操作
不设置 stable/icehouse Tempest 分支
stable/icehouse 集成服务将使用 Tempest master 进行测试
Tempest master 将基于以下内容上的成功运行进行 gate 限制
master 分支上的集成服务
stable/icehouse 分支上的集成服务
(注意:这将使 Tempest 提议的变更的作业数量翻倍)
发布后,devstack-gate 将更改为显式设置 Tempest 期望测试的服务,以及每个分支上期望测试的扩展。
这具有级联影响,最好描述为场景(我将使用 nova 作为示例服务,主要是因为我对扩展模型更熟悉,而不是因为 nova 被针对)
场景 1:用于新功能的新测试¶
如果在 Juno 中添加了 Nova 的新功能,并且为该功能添加了 Tempest 的新测试,则该测试需要位于功能标志之后(因为该功能在 Icehouse 中不可用)。
nova stable/icehouse - 测试已跳过,功能不可用
nova master - 运行测试
这具有额外的优势,可以确保新的 Nova 变更以某种可发现的方式添加,即它不存在(即,位于未加载的扩展中),并且 Tempest 具有配置或不配置它的旋钮。
场景 2:需要 Tempest 变更的核心项目中的错误修复¶
以前,nova master 中的行为变化需要 Tempest 变更,可以通过 tempest 的 2 步流程来更改
提出 nova 的变更,获得 nova +2
提出 Tempest 的跳过,在 nova +2 变更后 +Aed
将 nova 变更合并到 master 和 stable/icehouse(如果需要)
将更改后的测试合并到 Tempest
在这个新模型中,该变更也需要同时回移植到 stable/icehouse。或者,我们决定这是一种不应该进行测试的行为,并完全删除该测试。
场景 3:用于现有功能的新测试¶
在添加用于现有功能的新的测试时,新的测试需要同时通过针对 nova master 和 nova stable/icehouse 的测试。如果发现两者之间存在行为差异,我们需要在合并测试之前协调该行为。我们最终有 3 个选项
修复 nova master 以反映 nova stable/icehouse 行为(nova 回归)
修复 nova stable/icehouse 以反映 nova master 行为(缺少回移植)
决定不合并 Tempest 测试,因为它试图验证我们不认为稳定的行为
场景 4:过时的测试¶
例如,Nova XML v2 在 icehouse 中已弃用,并在 juno 中(假设)删除。然而,XML v2 测试在 Tempest 中,我们仍然需要测试 icehouse 发布。
这将通过缓慢弃用/功能标志来处理
添加 Tempest v2 XML 功能标志(默认值为 false)
修改 devstack-gate 以设置为 stable/icehouse 的 true
测试在 master 中跳过,在 stable/icehouse 中运行
一旦 stable/icehouse 不再受上游支持(2015 年 2 月),测试将完全从 Tempest 中删除。
这意味着 Tempest 将包含更多的遗留代码,但是这是我们接受的权衡,以获得它提供的优势。
其他影响¶
这将产生一些有趣的其他影响
stable/* 分支不会经常被破坏:由于大量的 tempest 补丁需要一个工作的 stable/* gate 才能合并,stable/* 将获得更定期的测试,并且更经常处于工作状态
API 保证将收紧。我们将不仅测试 Tempest 中 API 是否符合我们的预期,还将测试它在多个版本中是否表现相同。破坏这种行为的额外摩擦将减缓未来任何破坏。这意味着 API 兼容性要求的实际提高。
替代方案¶
另一种选择是继续使用当前的方法,该方法在 Tempest 中使用 stable/* 分支。然而,这导致了与 devstack 更多的不必要的耦合,我相信从长远来看,对于像 Tempest 这样的测试套件来说,这并不是正确的方法。
实现¶
负责人¶
- 主要负责人
Sean Dague <sean@dague.net>
如果他们打算在此蓝图上进行大量实现工作,可以选择性地列出其他 ID。
里程碑¶
完成目标里程碑
4 月 17 日用于主要基础设施
Juno 发布周期以处理各种回移植到 devstack stable/icehouse 以支持所有 tempest 功能标志
工作项¶
工作项目跨项目
devstack-gate 通用分支覆盖支持 (DONE)
基础设施作业以在 stable/icehouse 上 gate Tempest(可用时)
devstack-gate 更改以选择不仅服务,而且每个发布版本支持的功能
devstack 支持设置 stable/icehouse 功能
其他 Tempest 功能标志用于尚未解决的可选功能
依赖项¶
仅以上列出的