开发过程代码管理 -- CI

186 阅读4分钟

简介

本文主要学习,为什么要用持续集成,什么是持续集成,持续集成解决了什么问题;在开源社区中几种常用的CI工具该如何使用?

为什么要使用持续集成?

CI可以带来很多好处,从代码校验的角度来看:
在本地进行校验,依赖 Git hook 功能,然而使用 Git hook校验存在被绕过的风险;本地校验的另一个问题是,协作时无法知道对方提交的代码是否符合规范,只有将代码下载到本地执行校验才可以获得校验结果。
Git 提交的时候会执行 hook 校验,如果添加参数--no-verify,则可以跳过 hook 校验。

如果能够在服务器上运行校验,就解决了Git hook校验可能被绕过的问题,社区中有很多在服务器上运行测试和校验的服务,社区提供的服务叫作持续集成服务。

持续集成CI是什么?

持续集成(Continuous Integration,CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能发生多次集成。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽早地发现集成错误

工作流程: image.png

  • 开发人员在其本地计算机上检查代码
  • 完成后 - 他们将代码变更提交到代码仓
  • 代码仓向CI系统发送请求(webhook)
  • CI服务器运行任务(测试,覆盖率,检查语法等)
  • CI服务器发布已保存的工件( artifacts )以进行测试
  • 如果构建或测试失败,CI服务器会向团队发出警报
  • 该团队解决了这个问题

开源社区常用的CI工具

CI可以带来很多好处,目前,开源社区常用的CI工具有3款,分别是GitHub ActionsCircleCITravis CI

GitHub Actions

GitHub Actions 是 GitHub 官方提供的自动化服务,官网是这么介绍的: 在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。您可以发现、创建和共享操作以执行您喜欢的任何作业(包括CI/CD),并将操作合并到完全自定义的工作流程中。

GItHub Actions优点:

  • 和 GitHub 集成更容易;
  • 支持复用其他人的脚本片段;
  1. 登录github 进入项目 image.png

  2. 根据项目的性质,是npm包还是把项目发布到git? 然后选择对应的模板;也可以自定义自己的模板; image.png 搜索或者选择一个 Node.js 模板。 image.png 该文件的默认内容: image.png 也可以根据自己的需求修改该xml文件 image.png image.png image.png 上面操作的原理是在 .github/workflows 目录下添加一个 xxx.yml 文件, 当然该文件也可以自定义的。 后面再提交: image.png 使用 GitHub 提供的终端命令行工具: GitHub CLI 终端

Circle CI 和 Travis CI

CircleCI是一个基于云的系统 - 不需要专用服务器,您无需管理它。 但是,它还提供了一个本地解决方案,允许您在私有云或数据中心中运行它。

  • CircleCI是一个基于云的系统 - 不需要专用服务器,您无需管理它。 但是,它还提供了一个本地解决方案,允许您在私有云或数据中心中运行它。
  • 即使是商业帐户,它也有免费计划
  • Rest API - 您可以访问项目,构建和工件(artifacts)。构建的结果将是工件或工件组。 工件可以是已编译的应用程序或可执行文件(例如,android APK)或元数据(例如,关于测试`成功的信息)
  • CircleCI 缓存必要的安装(requirements installation)。 它会检查第三方依赖项,而不是持续安装所需的环境
  • 您可以触发SSH模式访问容器并进行自己的调查(如果出现任何问题)
  • 这是一个完整的开箱即用解决方案,需要最少的配置\调整

Gitee

Gitee Go 是 Gitee 推出的一款 CI/CD工具,提供持续集成,持续交付(部署)能力。不断提升应用交付的质量和效率。通过构建自动化、测试自动化、部署自动化、运维自动化,完成从代码提交到应用交付的自动化当前 Gitee Go 提供免费尝鲜服务,开通后赠送 200 分钟体验时长;Gitee Go 为增值服务,计费方式为预付费,按构建时长购买。付费企业套餐资费不包含 Gitee Go 等增值服务,如需使用请单独购买。

image.png image.png image.png

如果使用的是 GitLab,则可以直接使用 GitLab 的构建工具;对于公司内部的项目,可以使用 Jenkins。

SonarLint的CI

webstorm中使用 sonarLint插件并配合 sonarQubesonarCloud 您的团队可以共享公共语言规则集、项目分析设置等;这种组合形成了一个连续的分析解决方案,使代码质量和安全问题远离您的分支。 NodeJs >= 14.20 更推荐版本 >= 16。 sonarQube

参考

cicle ci GitHub CLI 终端命令行