让你的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的代码库中、从持续集成进阶到持续交付等。这本书基本没怎么涉及这些话题,毕竟它出版有些年头了,但这仍不失为一本好书。

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

相关文章
|
1月前
|
测试技术 持续交付 开发工具
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
59 2
|
3天前
|
监控 Devops 测试技术
DevOps实践:持续集成与持续部署(CI/CD)在现代软件开发中的作用
【6月更文挑战第24天】本文深入探讨了持续集成(Continuous Integration,简称CI)和持续部署(Continuous Deployment,简称CD)在现代软件开发生命周期中的核心作用。通过阐述CI/CD的概念、优势以及实施策略,文章旨在为读者提供一套完整的理论框架和实践指南,以促进软件开发流程的高效性和产品质量的提升。
|
9天前
|
监控 jenkins 测试技术
持续集成/持续部署(CI/CD)的最佳实践
【6月更文挑战第19天】CI/CD最佳实践概括: 确定CI(集成早期发现错误)和CD(自动化部署)概念,选择适配团队的工具如Jenkins、GitLab CI;编写自动化测试,确保每次提交时运行;实行代码审查和质量检查;自动化构建与部署,利用容器技术;建立监控与反馈机制,快速响应问题;采用分支策略如特性分支和拉取请求;持续学习与改进流程,优化效率和质量。
|
10天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署(CI/CD)的精髓
【6月更文挑战第17天】本文将深入探讨DevOps文化中的核心实践——持续集成(CI)和持续部署(CD)。我们将从理论出发,逐步过渡到实际操作,介绍如何搭建一个高效的CI/CD流程。文章将涵盖工具选择、流程设计、自动化测试以及监控和反馈机制的建立。通过具体案例分析,揭示成功实施CI/CD的关键因素,并探讨如何在组织内推广这一实践以促进开发和运维之间的协作。
|
2天前
|
监控 Java jenkins
Java中的持续集成与持续部署(CI/CD)
Java中的持续集成与持续部署(CI/CD)
|
1月前
|
存储 测试技术 持续交付
【Docker 专栏】Docker 与 CI/CD 的集成策略
【5月更文挑战第8天】本文探讨了Docker在CI/CD流程中的作用,强调了环境一致性、快速部署和资源隔离等优势。通过在构建、测试和部署阶段集成Docker,可以提升软件开发效率和质量。具体集成策略包括使用Dockerfile构建镜像、整合CI/CD工具如Jenkins和GitLab。集成带来的好处包括提高效率、增强可靠性、加速交付和简化管理。然而,也需应对镜像管理、网络配置和安全等问题。通过案例分析,证明了Docker与CI/CD集成的有效性和必要性。
【Docker 专栏】Docker 与 CI/CD 的集成策略
|
1月前
|
监控 jenkins 测试技术
理解并实现持续集成(CI)与持续部署(CD):加速软件开发的关键步骤
【5月更文挑战第27天】本文介绍了CI/CD在加速软件开发中的关键作用。CI(持续集成)通过频繁集成代码并自动构建测试,减少错误,提高开发速度和代码质量。实现CI需要版本控制系统(如Git)、自动化构建工具(如Jenkins)和测试框架。CD(持续部署)则进一步自动将通过测试的代码部署到生产环境,提供快速反馈,降低风险。实现CD需配置管理工具(如Ansible)、容器技术(如Docker)和云基础设施。CI与CD结合,形成高效开发流程,最佳实践包括保持主干干净、自动化所有流程、持续监控、快速回滚和持续学习。
|
1月前
|
机器学习/深度学习 敏捷开发 测试技术
深入探索软件测试中的持续集成与持续部署(CI/CD)实践利用机器学习提升网络安全防御效能
【5月更文挑战第27天】 在现代软件开发的快节奏环境中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已成为确保产品质量和加快交付速度的关键策略。本文将深入探讨CI/CD在软件测试中的应用,分析其对提高自动化测试效率、缩短反馈周期以及优化发布流程的重要性。通过实际案例研究,我们揭示了成功实施CI/CD的最佳实践,并讨论了面临的挑战及其解决方案。
|
1月前
|
运维 监控 安全
构建高效自动化运维系统:基于容器技术的持续集成与持续部署(CI/CD)实践
【5月更文挑战第14天】 随着DevOps文化的深入人心,持续集成与持续部署(CI/CD)已成为现代软件工程不可或缺的组成部分。本文将探讨如何利用容器技术,尤其是Docker和Kubernetes,构建一个高效、可扩展的自动化运维系统。通过深入分析CI/CD流程的关键组件,我们将讨论如何整合这些组件以实现代码从提交到生产环境的快速、无缝过渡。文章还将涉及监控、日志管理以及安全性策略等运维考量,为读者提供一个全面的自动化运维解决方案蓝图。
|
1月前
|
敏捷开发 监控 Devops
深入探索软件测试中的持续集成与持续部署(CI/CD)实践
【5月更文挑战第13天】 在现代软件开发的快节奏和复杂性中,持续集成(Continuous Integration,CI)与持续部署(Continuous Deployment,CD)成为确保软件质量和加速交付的关键策略。本文将深入探讨CI/CD在软件测试中的应用,解析其核心概念、流程以及面临的挑战,并分享实际案例分析以揭示如何在不断变化的开发环境中维持高效和可靠的软件发布周期。

热门文章

最新文章