持续集成是软件工程领域中的一种最佳实践,即鼓励研发人员频繁的向主干分支提交代码,频率为至少每天一次。每次提交都触发完整的编译构建和自动化测试流程,缩短反馈周期,出现问题第一时间进行修复,从而保证软件代码质量,减少大规模代码合并的冲突和问题,让软件随时处于可发布状态。
术语名称 | 术语解释 |
---|---|
自动化 automated | 一个“无需干预”的过程。当一个完全自动化的过程开始之后,不需要用户的干预。 |
构建 build | 生产、测试、审查和部署软件的一组活动。 |
持续 continuous | CI中的持续更像是坚持,一个进程不断运行,轮询版本控制库的变更。如果CI服务器发现了变更,就会执行构建脚本。 |
持续集成 Continuous Integration | 一项软件开发实践,其中团队的成员经常集成他们的工作,通常每个人每天至少集成一次,这导致每天会集成多次。每次集成是通过自动化的构建(包括测试)进行的,目的是尽快地检查集成错误。 |
开发环境 development environment | 软件编写的环境。这包括IDE、构建脚本、工具、第三方的库、服务器和配置文件等。 |
审查 inspection | 出于内部品质要求,对源代码/字节码进行分析。本文中将自动化的审查(静态分析和运行时刻分析)称为”软件审查“。 |
集成 integration | 将各部分源代码结合到一起,确定它们时刻能作为一个整体工作。 |
集成构建 integration build | 将软件组件(程序和文件)结合成一个软件系统的动作。得到的构建版本对于较大项目来说可以包含多个组件,对于较小的项目来说只是包含低级的、编译过的源文件。本文中“集成构建”特指在独立的集成构建计算机上执行的构建。 |
私有/系统构建 private/system build | 将变更提交到版本控制库之前,在您的工作站上执行的本地构建,目的是减少最近的变更破坏集成构建的可能性 |
品质 quality | 本文中“品质”是可测量的规格说明,和其他行业一样。这意味着您可以确定具体的品质测量指标,如可维护性、可扩展性、安全性、性能和可读性等。 |
发布构建 release build | 准备将软件发布给用户。这可能发生在一次迭代结束时或达到某个里程碑时,必须包括验收测试,可能还包括大量的性能测试和负载测试。 |
风险 risk | 问题发生的可能性。已经成为现实的风险就称为“问题”。我们关注发生可能性较大的、较高优先级的风险。 |
测试 testing | 验证软件是否按设计工作的一般过程。而且,我们把开发者测试分成几类,如单元测试、组件测试、系统测试等,它们验证对象、包、模块和软件系统是否按设计工作。还有许多其他类型的测试,如功能测试和负载测试、但从CI的角度来说,至少所有由开发者写的单元测试都要在构建时进行(但构建可以分级别,先执行较快的测试,在执行较慢的测试) |
在开始持续集成之前,需要先做好以下事情,以让持续集成能够更加有效:
对应线上(正式环境)的代码,版本上线由测试人员确认,通知开发人员将对应上线版本合并至master分支并打tag,准备部署或更新至生产环境。
当开发在开发环境测试完成以后,合并到内部测试分支:test-版本号,将功能移交给内部测试人员进行测试,内部测试人员部署到内部测试环境进行测试。
当内部测试完成后,合并到生产测试分支:release-test-版本号,将分支提交到测试组,由测试组负责部署到生产测试环境进行测试。
当测试组完成生产测试全部工作后,对生产测试分支进行tag操作,并根据产品发布计划,基于tag进行生产发布。
基于Jenkins工具进行自动构建/部署流程,具体参考以下内容: