CI:Continuous Integration
持续集成是指频繁将代码合并至中央储存库中。“频繁”通常具体指一天多次。
CD:Continuous Deployment
持续部署。
1)什么是CICD
在小步快跑,快速迭代的现代化开发场景中衍生出来的一种减少人力的技术。
CD:项目完成后,给了用户,不能出现配半天配不好环境的情况。要自动化部署。
CI:自动把项目的所有模块汇聚到一个repository中。CI的好处是,developer只管coding就好。这唯一的一个repository会自动的接收你更新的code。其他的build,test,scan,都可以交给自动化进程去跑。
2)CI的作用:
每次代码更新,都会进行代码校验。包括build,test,source code analysis,automated deployment。通过这个校验流程,可以确保项目质量,不会因为一个错误变动而崩溃。
3)Jenkins
谈到 CI,最广为人知且老牌的工具是 Jenkins。 Jenkins的功能完整,是一套可以自订流程的系统。一旦流程被定义,并整合好相关环境,它可以发挥持续性整合威力,大幅增加开发生产力。
4)常见开发工具
Git — 版本管理
GitHub — 程式码托管、审查
CircleCI — 自动化建置、测试、部署
Docker — 可携式、轻量级的执行环境(使用 Docker,统一开发者、测试人员、以及产品的执行环境。)
AWS Elastic Beanstalk — 云端平台
Slack — 团队沟通、日志、通知
5)建立 CI / CD 流程
我们结合了 Git Flow + Protected Branch Flow 的开发流程,流程如下:
1、开发者 (Developer) 先开立 (create) 一个功能分支 (feature branch)。
2、开发者提交一个 Pull Request, SCM (Supply Chain Management)系统会自动触发 Jenkins 进行Build以及test。这个触发通常是经由 Webhook 来实现。
3、Build完成后,在 Jenkins 增加一个步骤来送出原码扫描 (Code Scan) 的请求给 Sonarqube 系统。 Sonarqube 则在完成程式码扫描后将结果写回 SCM 系统。
4、由于我们在 SCM 上连结了 Slack,每个步骤完成(成功或失败)的通知便可以送到 Slack 群组。
5、原码审核者 (Reviewer) 可以到 SCM 上查看这个Pull Request的相关讯息,搭配 Code Scan的结果决定是否将这个分支合并 (merge) 回主线(develop/master branch)。
6、分支合并可以触发另一个 CI 工作,使 Jenkins 将主线Build后deploy到测试环境提供给其他人员进行测试。
6)Example
由Facebook开发和维护的React JavaScript框架具有强大且高可见的CICD Pipeline是一个很好的例子。 如果您访问其Github页面并单击其自述文件顶部显示的按钮,您可以了解它们通过其代码库运行的自动化流程类型。 Coverage按钮链接到Coveralls,这是一个显示单元测试覆盖率报告的工具。 您可以单击CircleCI按钮,该按钮自动针对贡献者显示其提交的Pull Requests运行的所有build历史记录。 如果单击build,您甚至可以查看CI过程中的每个步骤以及它们的Pipeline配置方式。
![](https://i-blog.csdnimg.cn/blog_migrate/2040cd736c40463bce68ba2c55a3b7a1.png)