什么是CI/CD?它们与敏捷开发和devops的关系?

    现在某些大型公司中软件的开发和发布已经形成了一套标准流程,其中敏捷开发和DevOps是更好更快发布产品的常用的两种理念,而CI和CD是实现这两种理念的一种方法。他们之际的关系可以粗暴的用下图表示:

devops 与敏捷项目管理_devops 与敏捷项目管理

一、什么是CI?

1、定义

    CI是Continuous integration的简称,持续集成指频繁地(一天多次)将代码集成到主干,其实就是将编码、代码的编译、打包、单元测试执行、静态代码的分析,甚至包括自动化的功能性测试等,这一套动作将其自动化运行起来的过程叫持续集成。核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。CI的目得是让产品可以快速迭代,同时还能保持高质量。CI流程如下图:

devops 与敏捷项目管理_CD_02

devops 与敏捷项目管理_CD_03

2、好处

(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。

(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

3、总结

持续集成并不能消除 Bug,而是尽早发现bug。

二、什么是CD?

1、定义

CD包括Continuous Delivery(持续交付)和Continuous Deployment(持续部署)

(1)Continuous Delivery(持续交付)

    持续交付可以看作持续集成的下一步,指频繁地将软件的新版本,交付给质量团队或者用户,以供评审,如果评审通过代码进入待生产部署状态,也就是说不管怎么更新,软件具备随时交付到生产环境的能力,但还没有真正部署到生产。

devops 与敏捷项目管理_持续部署_04

devops 与敏捷项目管理_持续集成_05

(2)Continuous Deployment(持续部署)

    持续部署是持续交付的下一步,指代码通过评审以后可自动部署到生产环境,也就是说代码具备随时部署到生产的能力。持续部署的前提是能自动化完成测试、构建、部署等步骤。持续部署是自动,持续部署是持续交付的最高阶段

devops 与敏捷项目管理_持续集成_06

三、持续集成、持续交付、持续部署三者关系

    持续交付不可以了解为流水线,持续集成CI与持续交付Continuous Delivery的区别可以粗暴的认为:持续交付=持续集成+测试策略。持续交付表示的是一种能力,而持续部署则是一种方式。

devops 与敏捷项目管理_CI_07

devops 与敏捷项目管理_devops 与敏捷项目管理_08