让你的CI跑起来-《持续集成》读书总结

简介: 持续集成已经被公认为极具价值的一项工程实践。在初始化一个项目时一个重要的任务就是搭建持续集成服务器,编写构建脚本。在我工作的所有项目中都引入了持续集成机制。它已经像氧气一样成为软件开发过程中的一项工程活动。

持续集成已经被公认为极具价值的一项工程实践。在初始化一个项目时一个重要的任务就是搭建持续集成服务器,编写构建脚本。在我工作的所有项目中都引入了持续集成机制。它已经像氧气一样成为软件开发过程中的一项工程活动。

《持续集成》站在理论的角度阐述了持续集成能够解决什么样的问题,如何解决,需要遵循那些原则等。这本书的副标题是-软件质量改进和风险降低之道(Improving Software Quality and Reducing Risk)。副标题直指持续集成的两个好处:提高软件质量及降低项目风险。

当前面临的问题

当前软件开发一直存在两大难题:一是确定软件的需求,即确定目标。究竟软件要做成什么样子,在客户的头脑里可能是个三角形,在业务分析员的头脑中可能是个正方形,在开发者的头脑中可能是个圆形,而最终出来的产品或多或少都会给客户带来“惊喜”。

二是确定目前离目标还有好远,即确定剩余的工作量。这个问题就是项目缺少可见性的问题。当一个程序员告诉他的经理说这个功能只剩下20%的工作量时,具体指什么那?这个20%的比例是怎么得到的?是还要再花20%的时间?……

持续集成虽然解决不了第一个问题,但是关于第二个问题,持续集成向我们介绍了一种增加项目可见性,提高开发效率,降低项目失败风险的有效实践经验。

其实持续集成蕴含有哲学思想:分而治之。即我们通常说的 “滴水穿石,硅步千里”。

传统瀑布方法一般将系统集成放置到开发完成后,这样会导致一系列的问题。

  • 没有一致的、可部署的软件。只有等到集成完成之后,我们才能够拿到一个可以使用的软件。

  • 很晚才发现缺陷。接口不一致、接口不满足实际需求、开发人员对功能理解有偏差….这些问题在集成测试时统统暴露出来。由于软件根基已经建立,这时候修改容易伤筋动骨。

  • 低品质的软件。正如上条所说,缺陷发现的越晚,修改的代价越大。在交付的压力下,各种猴子补丁散落在系统的各个地方,软件的品质自然也很难提高。

  • 缺少项目可见性。直到系统集成之前,你都拿不出可用的软件。而且系统集成之时,往往是项目中最棘手、最紧张的时刻,你很难预估集成什么时候能够彻底完成。这样的项目自然谈不上什么可见性了。

CI的价值

引入了CI(Continuos Integration,即持续集成)以后,每个开发人员在提交代码的时候都会自动进行构建,包括代码审查、编译、单元测试、打包、功能测试等。这样保证了开发人员的每次提交都是安全的。打包生成的文件随时可以被测试人员拿去测试。如果需要给客户演示功能,也只需从CI服务器上直接获取指定的打包完成的文件即可。

CI的好处多多。

  • 减少风险

缺陷的检测和修复变得更快,让寻找和修改bug的工作变简单(只修改系统一小部分,无需看太多代码。由于提交后就可以得到反馈,记忆很新鲜,可以进行差异调试。)同时过早的引入集成,使我们能更好的审视各个模块的接口是否满足要求,减少项目中的假定。

  • 减少重复过程

由于CI将大量的工作给自动化了,那么可以让人们有时间做更多的需要动脑筋的、更高价值的工作。而且通过对重要过程自动化,克服了项目中某些成员对实现改进的抵制,有利于持续集成的推进。这样就形成了一个良性循环。

  • 在任何时间、任何地点生成可部署的软件

对于客户来说,可以部署的软件是最实际的资产。而CI则可以轻松做到这一点。

  • 增强项目的可见性

通过对CI服务器的监控,可以随时了解项目的趋势。CI上的红色或绿色表示了当前项目的健康程度。每一个功能的交付都经历了单元测试或集成测试的考验。

  • 对开发团队的软件产品建立起更强大的产品信心

CI可以防止破窗综合症,让开发团队一点点积累起对产品的信息。

CI的特征

img_d4d517e0f6b39fcd10a6d27af3caeb34.png

从上述图中可以看出CI有四个特征:

  • 与版本控制系统的连接

当开发者提交代码时,就会触发CI系统的运行。

  • 构建脚本

构建脚本继承了审查、编译、测试、打包、功能测试等环节,保证了产品的质量与可用性。

  • 某种类型的反馈机制

集成的结果要能很容易的获取到。可以通过一个web页面来呈现,也可以给团队人员发Email。我们公司有些团队做了一些有意思的插件,比如将build的结果映射到一个灯上,或者当构建失败时播放一段音乐等,随时提醒团队成员对build的关注。

  • 集成源代码变更的过程

代码变更会触发构建,保证了CI能够经常性的运行。

CI对团队的要求

很多团队说我们引入了持续集成,但是收到的效果并不好。比如遇到了CI持续失败、没人关注构建结果、没有及时修复build等。那是因为开发团队没有遵循一定的原则。

  • 经常提交代码

  • 不要提交无法构建的代码

  • 立即修复无法集成的构建

  • 编写自动化的开发者测试

  • 必须通过所有测试和审查

  • 执行私有构建

  • 避免迁出无法构建的代码


持续集成是一个实践性很强的工程活动,其实发展到现在也遇到了一些新的挑战。比如如何减少构建时间、怎样实现分阶段分布式构建、如何应用在有Branch的代码库中、从持续集成进阶到持续交付等。这本书基本没怎么涉及这些话题,毕竟它出版有些年头了,但这仍不失为一本好书。

如果你理解了持续集成的好处,那么在应用过程中就不会有抵触心理,而且也更容易理解持续交付。

相关文章
|
2月前
|
JavaScript 前端开发 持续交付
Prettier 高级应用:集成 CI/CD 流水线与插件开发
【10月更文挑战第18天】Prettier 是一款流行的代码格式化工具,它能够自动将代码格式化成一致的风格,从而提高代码的可读性和维护性。对于希望进一步发挥 Prettier 潜力的高级用户而言,将 Prettier 集成到持续集成(CI)和持续部署(CD)流程中,确保每次提交的代码都符合团队标准,是非常重要的。此外,通过开发自定义插件来支持更多语言或扩展 Prettier 的功能也是值得探索的方向。本文将详细介绍这两方面的内容。
48 2
|
18天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
25天前
|
jenkins Java 持续交付
软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分
随着软件开发自动化程度的不断提高,持续集成(CI)和持续部署(CD)成为现代软件开发的重要组成部分。本文以电商公司为例,介绍如何使用 Jenkins 自动发布 Java 代码,包括安装配置、构建脚本编写及自动化部署等步骤,帮助团队实现高效稳定的软件交付。
30 3
|
2月前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
1月前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
2月前
|
Devops jenkins 测试技术
DevOps实践:持续集成与持续部署(CI/CD)的实现之路
【9月更文挑战第33天】在软件开发的海洋中,DevOps是一艘能够加速航行、提升航程质量的巨轮。本文将作为你的航海图,指引你理解并实现DevOps文化中的核心环节——持续集成(CI)与持续部署(CD)。我们将从基础概念出发,逐步深入到实际操作,带你领略代码到部署的全过程。准备好扬帆起航,让我们共同探索如何通过自动化工具和流程优化,让软件交付变得既高效又可靠。
|
2月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
70 0
|
3月前
|
Kubernetes Go 持续交付
一个基于Go程序的持续集成/持续部署(CI/CD)
本教程通过一个简单的Go程序示例,展示了如何使用GitHub Actions实现从代码提交到Kubernetes部署的CI/CD流程。首先创建并版本控制Go项目,接着编写Dockerfile构建镜像,再配置CI/CD流程自动化构建、推送Docker镜像及部署应用。此流程基于GitHub仓库,适用于快速迭代开发。
62 3
|
3月前
|
Kubernetes 持续交付 Go
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
|
3月前
|
监控 Devops 测试技术
DevOps实践: 持续集成和持续部署(CI/CD)的入门指南
【9月更文挑战第10天】在快速迭代的软件开发世界中,DevOps已经成为加速产品交付、提升软件质量和团队协作的关键策略。本文将深入浅出地介绍DevOps的核心组成部分——持续集成(Continuous Integration, CI)与持续部署(Continuous Deployment, CD)的基本概念、实施步骤以及它们如何革新传统的软件开发流程。你将学习到如何通过自动化工具简化开发流程,并理解为什么CI/CD是现代软件开发不可或缺的一环。