个人博客注册免费:以review 体系为核心的新一代继续集成

以review 体系为核心的新一代继续集成 现在的 CI 是以 CI 效劳器为中间。CI 效劳器负责发现变动并触发使命。新一代的 CI 则是以代码 review 体系为核心,这样能够保证在变动合并到版本治理体系之前实现相应的操作。

传统的继续集成(CI)体系被设计成作业的流水线。你能够有一个偕行评审,而后初步构建作业,而后是单元测试作业,而后是集成测试作业,而后是性能测试作业,诸云云类。

每一个作业都是由前一个作业的成功实现工作触发的,而第一个作业则是由版本管束体系中源代码文件的变更工作来触发的。固然,如果你的方针是多个二进制平台,或者如果你正在构建的是一组组件,以此来测试整个的应用程序,那么它还会愈加的杂乱。

那么如果有使命落空了会怎么样?Jez Humble 和 David Farley 在继续交给中以为,你起首需要恪守这样的原则:"不要在落空的 build 上提交接码"。换句话说,不要因为新的提交导致问题更严峻。如果你违背了这个原则,你就没法确认引起过错的真正缘故原由。Humble 和 Farley 倡议挑选下面两种策略之一来办理 build 落空的状况:

"当 build 落空是,不要去做其他事情," 意思是团队中的所有人都要停下来去修复这个问题。

"时刻筹备回滚到上一版本。" 回滚的策略能够防止打断整个团队的事件。

固然,也能够采用混合的策略:在可容忍的工夫内尝试修复,超过期间则进行回滚。

另有一种方式能够略微缓解问题,那就是利用集成分支,惟独集成分支是绿色的(所有测试经过),才允许进行代码的合并。这种策略下集成分支仍是有相同的问题,不外 master 分支能够保证总是可用的。

相似的方式适用于小团队,你能够让团队的所有成员都暂停代码的提交,不外即便是小团队,CI 处于赤色状态也有可能会继续比拟长的工夫。关于这种方式的 CI 实际,你需要严厉恪守完善的规则。不外你也能够尝试一种新的施行 CI 的方式。

新一代的 CI

现在的 CI 是以 CI 效劳器为中间。CI 效劳器负责发现变动并触发使命。

新一代的 CI 则是以代码 review 体系为核心,这样能够保证在变动合并到版本治理体系之前实现相应的操作。

是否加入团队的代码 review 的过程,这取决于你。我强烈倡议经过代码 review 来提高代码的质量,可是这与 CI 体系自身是独立的。大家需逞强调的是,构建和测试这些行为是由代码 review 体系的新提交来触发的。当所有测试都经过后,代码才会被合并到骨干上。云云一来,骨干的代码总是能够保证是测试经过的,开发人员也能够并行的进行代码提交。新的 CI 系统能够让你的主动化变得流畅,由于再也不有问题会堵塞流程。

OpenStack 的事件流程

CI上的新的办法现已在 OpenStack 项目中得到大范围的完成,一次来治理所有差别的子项意图CI过程。为了使你对它的范围有一个概念,能够看到每天 OpenStack 都要办理 1000 个提交的补丁包,7500条提交的有对于Gerrit的探讨和投票, 催生出16,000 个测试环境,另有250次变更的合并(源代码)。

为了完成下一代的CI体系,OpenStack项目利用下面这些组件:

Gerrit, 代码审查和git资源库治理器。

Zuul, git代码库管束体系。

Jenkins, 继续集成效劳器。

Nodepool, 布置在OpenStack云上的智能的 Jenkins 衍生东西。

这些东西经过利用随机揣度的合并策略来完成在同一个项目上的并行测试。如果同一工夫在同一项目之上产生了多次评审,Zuul就可以够以随机揣度的方式将它们放到一块儿来对它们进行测试。例如,加入评审被命名为A、B和C,那么Zuul将会并行的对 A、A+B以及A+B+C进行测试。如果他们都成功了,那么就现已跟A通过了测试并进行了合并效果是一样的了,而后B在分支(A)的根底上通过了测试而后进行了合并,C在A+B的根底之上也同此理。 这样当你同一个项目有多个代码孝敬者时,集成的过程会加快不少。

Zuul 还能治理跨多个项意图依赖,允许资源库间评审的合并。这在git中是个要害的工具,由于在git中你的组件存在于差别的git资源库中。

试一试

关于大的团队乃至是小的团队来说,你都能够经过配置前述的组件来使项目获益于这一事件流程。Puppet 模块就可以用来轻松的配置这些效劳。

另一种办法就是利用大家本人对这些效劳的集成,叫做软件工厂。你将会取得下面这些功用特性:

对这些功用做了一个不错集成的一个 web 菜单。

一个在所有这些效劳间轻松进行单点登录的方案,另有在 LDAP、GitHub 或者登录面饭(cauth)上的外部认证方案。

一个bug盯梢体系(Redmine). 协作东西: 用于同享输出或者代码提取的 Paste。 用于协作编辑的 Etherpad。

以一种简单的方式治理从之前版本的晋级。

由于软件工厂是自托管的(大家利用软件工厂来开发软件工厂), 你能够在 softwarefactory-project.io 上对它进行了解。

如果你想要测试驱动的软件工厂,只需按 softwarefactory-project.io/docs/deploy.html 上的文档照做就好了。

你能够就利用这一新的办法进行 CI 的收获同大家保持沟通。

相关阅读