CI 与 CD 基础

持续集成(Continuous Integration)指开发人员在特性分支(频繁)提交代码,立即执行构建和单元测试,代码通过测试标准后集成到主干的过程。强调的是分支代码的提交、构建与单元测试,这个过程的产出是单元测试报告

持续集成

持续交付(Continuous Delivery)是在持续集成的基础上,将构建的代码部署到「类生产环境」,完成 QA 测试之后手动部署到生成环境的过程。强调代码部署,这个过程产出测试报告

持续交付

持续部署(Continuous Deployment)是持续交付的下一步,强调部署生产环境代码的过程自动化,同时可以处理上线通知等操作。与持续交付主要的区别是手动跟自动。

持续部署

以上图片参考:The Product Managers’ Guide to Continuous Delivery and DevOps

CI/CD 的必要性

以一言概之的话就是:机械的事情让机器做。一个开发团队,没有 CI/CD,我想可能是这样子的:无法管理代码多人多地协作(git repository 也是 CI 的一部分),系列的 shell 需要人工处理,代码的发布需要登录服务器等等;相反,拥有 CI/CD,这些事情都交给机器去完成,腾出的碎片时间去做更有意义的事情。

CI/CD 的开发流

理想的 CI/CD 开发流应该包含三个阶段:builddeploynotify。build 阶段专注做代码构建与单元测试,deploy 阶段专注做 test/gray/prod 环境的代码部署,notify 阶段专注做上线通知,如下图;

CI/CD 开发流

详细工作流程参考下图:

一旦将代码提交推送到远程仓库的分支上,那么为该项目设置的CI/CD管道将会被触发。

GitLab CI/CD 通过这样做:

  • 运行自动化脚本(串行或并行) 代码Review并获得批准
    • 构建并测试应用
    • 使用Review Apps预览每个合并请求的更改
  • 代码Review并获得批准
  • 合并feature分支到默认分支,同时自动将此次更改部署到生产环境
  • 如果出现问题,可以轻松回滚

CI/CD 实践

目前大部分公司使用 gitlab 中的 CI/CD 工具,当前还有其它强大的工具,可以参考:每个开发人员都应该知道的5个CI/CD工具

但作为个人用户,比较常用就是 Github Actions。后面以个人博客自动部署简单学习下 CI/CD 流程。

Github Actions

参考官方教程:GitHub Actions