使用持续集成工具

概要

这篇文章介绍了持续集成相关的概念,介绍了一些常用的持续集成工具,使用 GitHub Action 和 Travis-CI 体验自动化的持续部署流程。

什么是持续集成

持续的含义是每完成一个部分,就向下一个环节交付,发现问题可以马上调整,一直重复这个过程,持续的做这个动作。

集成的含义就是把修改内容合并到主干上,在版本管理工具中称为主分支。

持续集成(Continuous Integration,CI) 是指软件开发时,频繁的将修改内容集成到主干上,让产品可以快速迭代,同时还能保持高质量。在集成到主干之前要通过自动化测试,只有通过所有测试用例才能进行集成。持续集成不能消除 bug,而是让他们非常容易发现和改正。

一些概念

持续集成

持续集成(Continuous Integration,CI),开发人员提交新代码后,立即进行构建、(单元)测试,根据测试结果来确定新代码和原有代码能否正确的集成在一起。

在开发时,每天会进行多次的集成,这样做的好处是:

  • 快速发现错误:因为每次修改都会进行单元测试并集成到主干,可以快速发现错误,而且错误是最近修改内容导致的,因而也容易定位。
  • 防止分支大幅偏离主干:如果没有经常集成,可能会导致和主干之间差异很大,导致后续难以集成。

持续交付

持续交付(Continuous Delivery),频繁的完成项目构建,更新软件版本,并做好部署前的准备,是否部署一般需要交付给质量团队或用户进行评审。

持续交付可以看作持续集成的下一步,强调的是不管怎么更新,软件随时可以交付。

持续部署

持续部署(Continuous Deployment,CD),所有流程都是自动化的,单次修改提交会触发自动处理流程(测试、构建等),最后自动部署到生产环境。

持续部署是持续交付的下一步,一般企业中都会做到持续交付,但不做持续部署,因为持续部署是有风险的,因为一次简单的提交,可能会将 bug 引入生产环境。

常见的持续集成工具

市面上 CI/CD 工具非常多,如 BuddyJenkinsHudsonTeamCityTravis-CIGoCDBambooGitlib-CICircleCICodeshipBuildbotNevercodeIntegrityStriderAutoRABITFinalBuliderWerckerBuildkiteSemaphoreCruiseControlBitriseUrbanCode 等等,实在太多了,就取其中几个来体验一下。

Jenkins

中文官网:https://jenkins.io/zh/

一款开源的 CI/CD 软件,用于自动化各种任务,包括构建、测试和 部署。用 java 语言开发,需要 java 运行环境,也可以使用 docker 运行。

Github Actions

官网文档: https://help.github.com/cn/actions

GitHub 提供的持续集成功能,可以自动化和定制化项目工作流。尚在测试阶段,用户可以申请加入测试来体验。

Travis-CI

官网:https://www.travis-ci.org/

在 GitHub Actions 没有出来之前,很多人都是用这个来完成 CI/CD 工作的。开源项目可以免费使用,在国内有时访问速度有点慢。

自动化流程

根据持续集成的设计,代码从提交到生产,整个过程有以下几步。

提交

第一步是开发人员向代码库提交代码,在 svn 中称为提交(commit),在 git 中称为推送(push)。

测试(第一轮)

在代码仓库中设置钩子(hook),每次代码提交就会触发自动化测试,第一轮测试至少要完成单元测试。测试可分为:

  • 单元测试:针对函数或模块的测试
  • 集成测试:针对整体产品的某个功能的测试
  • 端对端测试:从用户界面直达数据库的全链路测试

构建

通过第一轮测试后,代码就可以合并进主干,可以交付了。交付后先进行构建(build),然后进入第二轮测试。构建是指安装依赖、配置资源、编译源码等过程。

测试(第二轮)

第二轮是全面测试,新版本的每一个更新点都要,需要进行单元测试和集成测试,有条件的话也要做端对端测试。如果第一轮测试覆盖了所有测试内容,可以省略第二轮测试,当然构建步骤也要在第一轮测试前完成。

部署

通过第二轮测试后,就是可以部署的版本(artifact),将这边版本进行打包,发到生产服务器,生产服务器解包并允许这个应用。

回滚

当前版本出现问题时,需要回滚到上一个版本的构建结果。

使用 Github Action

Github 的 Action 功能还未正式发布,所以需要注册才能使用,注册地址:https://github.com/features/actions/signup

创建仓库

创建脚本

提交代码&触发自动任务

查看结果

使用 Travis-CI

登陆官网 https://www.travis-ci.org/ ,可以直接用 GitHub 账号授权登陆。

Travis-CI 可以直接与 github 关联,在 github 仓库内容有变化时,自动完成项目的构建、测试、部署。详细操作可以参考我的文章:使用 TravisCI 自动部署 hexo 博客

参考资料

总结

持续集成这种自动化是未来的大趋势,不仅在大项目中可以使用,在我们自己的项目中,比如个人博客中也可以使用,将这些重复、繁琐的工作交给 CI/CD 工具来做,将大大减少我们的工作量,让我们把精力放到开发上。