持续集成认证

2017年1月18日

持续集成是软件开发中一种流行的技术。在各种会议上,许多开发者都会谈论他们是如何使用它的,而且持续集成工具在大多数开发组织中都很常见。但我们都知道,任何像样的技术都需要一个认证项目——幸运的是,确实存在这样一个项目。它由持续交付和DevOps领域的一位顶级专家开发,以管理速度快、结果见解深刻而闻名。虽然它已经相当成熟,但它的知名度还不够高,因此作为该技术的粉丝,我认为有必要与我的读者分享这个认证项目。你准备好获得持续集成认证了吗?你将如何面对测试揭示的惊人真相?

到目前为止,我的老读者们可能想知道他们是否看到了一篇恶搞文章 [1],是的,我在开头的这段文字里开了一个小玩笑。但就像任何好笑话一样,其中也蕴含着重要的真相。确实存在一个由 Jez Humble 创建的非常棒的持续集成测试——他无疑是 持续交付 领域的领军专家。这也是一个快速测试,他经常在演讲中对听众进行测试。唯一的问题是,我从未听他把它称为认证测试——这恰恰显示出他在赚钱计划上的缺乏远见。

他通常会在认证过程开始时,让听众举手示意他们是否在做持续集成。通常情况下,大多数听众都会举手。

然后,他会要求那些团队中每个人都至少每天提交并推送到共享主线(通常是Git中的共享主分支)的人继续举手。

超过一半的人放下了手。

然后,他会要求那些每次提交都会触发自动构建和测试的人继续举手。剩下的举手者中又有一半放下了手。

最后,他会问,当构建失败时,是否通常能在十分钟内恢复到绿色状态。 [2]

问完最后一个问题后,只有少数人还举着手。这些人就是通过他认证测试的人。

这只是一组简单的问题,但却触及了持续集成的核心。持续集成的核心思想是,没有人会在一个与其他人代码库有很大偏差的代码库上工作。持续集成意味着团队知道代码的真实当前状态,我们避免了高风险的大规模合并,人们可以根据需要进行尽可能多的重构。

之所以有那么多人在一开始就举手,是因为人们普遍认为持续集成就是在他们的功能分支上运行一些“持续集成服务器”。但持续集成——正如Kent Beck最初在 极限编程 中描述和命名的那样——与工具无关。一开始,它是一个人工工作流程,Jim Shore 曾提出一个很好的论点,认为它就应该是这样。在源代码仓库上运行守护进程的想法是后来才出现的,虽然它很有帮助,但只有在每天都提交到共享主线的情况下,它才算是持续集成。否则,在每个 功能分支 上运行这样的进程,就是 CI 形式主义,它贬低了这个名称的含义 [3],导致工作流程无法给你带来好处,而这些好处才是这一切努力的意义所在。

延伸阅读

有关持续集成的更多详细信息,请参阅 我的主要文章,虽然写于 2006 年,但它仍然是对该技术的一个可靠总结和定义。Jez 解释了为什么 持续集成是持续交付的基础。他在该页面的常见问题解答中陈述了这三个问题。Paul Duvall 撰写了关于持续集成的 权威书籍。观看 Jez 在 2014 年芝加哥 GOTO 大会上进行认证测试(遗憾的是,当时没有拍摄观众的镜头)。

致谢

所有这三个问题的功劳都归于 Jez,我一直很喜欢他的演讲。

注释

1: 总的来说,我不喜欢软件认证计划,因为它们通常无法通过 认证能力相关性

2: 对于这一步,“绿色”表示通过了 提交构建,通常是编译和单元测试。虽然我们通常希望运行完整的 部署流水线 来发布到生产环境,但在提交构建变为绿色后,代码仓库应该可以供开发人员继续工作。你应该有一个不超过十分钟的提交构建,这样如果修复很容易,就可以快速修复并重新运行提交构建。如果你不能在十分钟内修复并获得绿色的提交构建,那么你应该恢复到最后一个绿色构建。

3: CI 形式主义的问题导致一些人使用 基于主干的开发 这个名称,他们认为 语义扩散 已经使“持续集成”一词变得毫无意义。虽然我理解他们的观点,但我认为我们不应该屈服于语义扩散,相反,我们需要继续努力重新解释持续集成的正确含义,就像我们应该对其他遭受这种语义攻击的术语(如“敏捷”和“重构”)所做的那样。毕竟,Kent 对这个词的定义非常清楚,而使用另一个词则会削弱他在通过极限编程社区推广这项技术方面的重要作用。