title: 持续集成 category: page slug: continuous-integration sortorder: 0713 toc: False sidebartitle: 持续集成 meta: 当开发者们提交代码时,持续集成(CI)会自动重新构建、测试并部署应用。 translators: http://blog.chriscabin.com updated: 2016-07-22 13:00

持续集成

持续集成可以让构建、测试和部署应用自动完成。不管是由个人还是整个团队创建的软件项目,通常都会以持续集成为中心,来确保重要的步骤(如单元测试)都自动化完成了,而不是用手工处理。

持续集成为何重要?

当把持续继承(CI)作为软件项目开发过程中的一个步骤后,就可以大大减少部署时间,因为持续集成将那些需要人工干预的步骤次数最小化了。使用 CI 的小缺点有两处:第一,开发者需要花费一定的时间进行初始化设置;第二,如果一个项目被拆分成了多个部分,比如从单一架构到 微服务 架构,就会有一些不间断的维护工作。

自动化测试

使用 CI 的另外一个主要的优势是测试可以在部署过程中自动完成。 当开发者们检查源码库中的代码时,可以通过运行一个综合的测试套件 unit集成测试 来防止部署受损的问题发生。在检查期间,任何由测试套件捕获的偶然出现的 bug 都会报告出来,从而阻止部署过程继续。

源码审查中的自动化测试就像是保龄球保险杠,可以防止代码质量偏离正规。整合了单元和集成测试的 CI 可以保证任何代码修改都不会破坏现有的测试,从而确保软件能够按照预期工作。

持续集成的例子

下面的这幅图片从更高的层面说明了持续集成和部署是如何工作的。

One potential way for continuous integration to work with source control and a deployment environment.

如上图所示,当新的代码合并到源码库后,就会触发一个钩子来通知持续集成服务器有新的代码需要构建(如果通知功能不可用,持续集成服务器也可以采用轮询代码库的方式)。

持续集成服务器会获取到代码然后构建并测试。如果所有的测试都通过了,持续集成服务器就开始部署过程。新的代码会被同步到正在进行部署操作的服务器上。最后,通过重启服务以及相关的部署活动后,便完成了部署过程。

持续集成服务器和部署还有其它的结构图,以上仅是一种设置相对简单的例子。

开源持续集成(CI)项目

有很多种可以根据需要进行配置的免费开源持续集成服务器。

需要注意的是,其中有很多服务器都不是用 Python 实现的,但是可以很好地与 Python 应用配合使用。Polyglot 组织(使用超过一种语言和生态系统的组织)经常为他们的项目使用单一的集成服务器,而不管这些项目是用什么语言实现的。

Jenkins CI 相关的资源

通用持续继承相关资源