0%

什么是CI/CD

CI/CD是一种持续软件开发的方法论,通过自动化脚本将软件开发过程中引入错误的可能性降到最小。从一个新功能的开发到其被部署到生产环境的过程中,尽可能地减少人工干预甚至没有人工干预。

CI/CD中涉及到三个概念:持续集成(Continuous Integration)、持续交付(Continuous Delivery)、持续部署(Continuous Deployment)。

持续集成(Continuous Integration)

持续集成是指代码push到代码库后,通过运行构建和测试的过程来减少引入错误的可能,这个过程是自动被触发的。持续集成并不会消除bug,但是能够让我们更加容易地发现和修复bug。

持续集成主要运行构建、单元测试以及代码风格检查等这一类运行较快的测试和验证。

持续集成会运行在开发分支和master分支上,通常情况下,在开发分支上通过了持续集成的代码才能被合并到master分支。

持续交付(Continuous Delivery)

持续交付是持续集成的扩展,确保可以以一种可持续的方式将新的变更快速发布到生成环境。持续交付主要是确保应用可部署,可以随时发布到生产环境。

持续交付相比较持续集成,增加了验收测试,自动部署到staging环境等。可能会在staging环境做一些人工验证工作,验证工作完成之后再部署到生产环境。

持续交付主要运行在master分支,但是验收测试有时也会在开发分支上运行。

持续部署(Continuous Deployment)

持续部署也是基于持续集成的,与持续交付相似,比持续交付更进一步。持续部署会将每一个主线上的改变自动部署到生产环境。

相较于持续交付,它需要更加完备的测试。

ci/cd
图片来源:www.atlassian.com

CI/CD带来了什么好处

下面将列举一些引入CI/CD带来的好处。

  • 频繁部署: CI/CD会加速应用构建和部署过程。能够帮助我们一天多次部署。

  • 降低风险:通过不断发布尽可能小的功能,可以减少生产出现Bug的风险。同时也会让QA和客户对于发布不会感到很痛苦。

  • 降低成本:引入CI/CD意味着需要覆盖更全的单元测试,更加完善的验收测试,看起来是引入更多的工作量。其实不尽然,没有很好的单元测试和验收测试,意味需要花费大量的时间去手工测试,同时有可能导致已有功能被破坏。当出现bug的时候(bug一定会出现的),没有测试,就意味着可能需要大量去查找和修复问题。

  • 提高质量:通过一系列可靠的测试,可以及时地发现和修复bug。

  • 提高团队协作:通过一系列的测试,能够帮助我们确认,我们的改动没有破坏到已有功能。