1.什么是CI/CD?

  • CI (Continuous Integration):持续集成

持续集成是指程序开发者将代码块推送到Git远程仓库时,每次Push或Merge都将触发并运行一系列脚本来构建、测试和验证提交的代码,验证通过后合并到仓库分支中。

  • CD (Continuous Deployment) :持续部署

持续部署是持续集成的下一步动作,即通过CI方式成功将代码合入指定仓库后,再将应用程序部署到生产环境的一系列动作。

CI/CD方式可以在开发阶段更及时的发现问题,降低代码审核人员的工作量,并提高代码质量,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。CI/CD最大的优势就在于自动执行脚本,从开发到部署几乎不需要人为干预。

CI/CD在国外大型开源项目中运用普遍,多人开发、单人开发、非开源项目一样可以很好的运用CI/CD能力。此外,CI/CD还可以灵活搭建,收获意想不到的便利性,帮助程序员从重复而繁杂的工作中解放出来,更何况程序猿总喜欢说

2. CI/CD原理与流程

CI/CD 持续集成的工具有Circle CI、Travis CI、Jenkins、Gitee Go、GitLab CI/CD等。当CI/CD与代码托管工具完全集成时会带来巨大的便利性,如GitLab CI/CD、Gitee Go,可以将代码的提交、审查与自动合入结合在一起,借助工具来把控开发代码的质量,并且排除人为干预的误差性。

CI/CD的原理:

各大CI/CD工具的工作原理基本大同小异,以GitLab CI/CD为例。

GitLab CI/CD是怎么工作起来的呢?总结起来就两点:

  1. .gitlab-ci.yml文件添加到远程仓库的根目录;
  2. 为GitLab项目仓库配置一个Runner。

说人话.gitlab-ci.yml可以理解为流水线文件,使用 YAML语法描述,.gitlab-ci.yml文件描述了你要做什么事情,在此文件中指定构建、测试和部署的脚本。把.gitlab-ci.yml放到远端分支的根目录,你每次push或Merge代码到Git远程仓库时,Runner都会自动触发CI pipeline,去执行.gitlab-ci.yml流水线文件中描述的事。

Runner很好理解,就是一个用来跑仓库代码的构建、测试和部署的机器,可以是本地PC,也可以是一台服务器。Runner怎么配置、安装、注册,根据GitLab的说明按部就班就可以啦。

CI/CD的流程:

一旦你将提交推送到远程仓库的分支上,那么你为该项目设置的CI/CD管道将会被触发。GitLab CI/CD 是这样做:

  • 运行自动化脚本(串行或并行) 代码Review并获得批准

    • 构建并测试你的应用
    • 就像在你本机中看到的那样,使用Review Apps预览每个合并请求的更改 
  • 代码Review并获得批准
  • 合并feature分支到默认分支,同时自动将此次更改部署到生产环境
  • 如果出现问题,可以轻松回滚

通过GitLab UI所有的步骤都是可视化的

3.CI/CD集成方案

选择什么CI系统? 这取决于你的需求以及计划使用它的方式。

CircleCI建议用于小型项目,其主要目标是尽快开始集成。

当你从事开源项目时,建议使用Travis CI,这些项目应在不同环境中进行测试。

Jenkins被推荐用于大型项目,在这些项目中,你需要进行大量自定义,这些自定义可以通过使用各种插件来完成, 你可以在这里更改几乎所有内容,但此过程可能需要一段时间。

Gitee Go是Gitee内部集成的CI/CD工具,目前支持 Maven、Gradle、npm、Python、Ant、PHP、Golang等工具和语言的持续构建与集成能力。Gitee Go是属于Gitee的增值服务,需要你花费一笔小的费用。

GitLab CI/CD是GitLab内部集成的CI/CD工具,免费且高度集成是其最大特色。

这里列出了部分集成方案:

VS Code + GitLab + GitLab CI/CD + ECS:

VS Code + Gitee + Jenkins + ECS:

VS Code + Gitee + Gitee Go + ECS:

VS Code + Gitee + 百度效率云:

4.OneOS CI/CD能力

OneOS是C语言为主的开源项目,较为特殊的一点是并不涉及应用程序的部署流程。目前OneOS开源项目已经具备CI/CD能力,给项目的规范开发与持续推进带来了很大便利性。具体解决的问题与解决方式列出来供大家项目集成CI/CD时参考。

解决的问题与解决方式:

  • 代码规范、代码格式的统一

    依托Gitee Go,添加云主机、配置流水线任务。在开发者贡献代码提PR时,会自动触发流水线,进行代码规范与格式检查,会将不符合规范的地方罗列出来,供修改参考。当然,我们给开发者提供了代码开发过程中保存时立即格式化代码的工具,因此并不额外增加开发者的工作量。

  • 代码的编译问题

    依托Gitee Go,添加云主机、配置流水线任务。在开发者贡献代码提PR时,会自动触发流水线,进行代码的全量编译,若存在修复或新增代码带来的编译问题,能够及时发现并做出修改,保证代码仓库的提交质量。

  • 冒烟测试

    依托Gitee Go 和 Jenkins。新合入代码时会对原有代码按功能模块进行冒烟用例测试,及时发现新增代码对原有代码功能的影响,保证代码的稳定性。

说了这么多,总之一句话,能用工具完成的活,绝对不能动手!鼓掌!

关注&&联系

gitee: https://gitee.com/cmcc-oneos/OneOS-Lite

docs: https://oneos-lite.com/

03-05 23:21