一、gitlab 实现的 auto devops
1. DevOps中的一些概念与原则
(1) 什么是持续集成
持续集成(Continuous integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干。
它的好处主要有两个。
- 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
- 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
(2) 持续交付、持续部署的概念
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
(3) 持续集成系统的组成
- 一个自动构建过程,包括自动编译、分发、部署和测试等。
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
- 一个持续集成服务器。
(4) 为什么要引入auto devops
部署的环境问题 ;
Dev, QA, Ops的进度问题 ;
持续集成的好处 :
编译问题与Bug可以在push或合并之后第一时间发现并解决;
Devops使持续交付成为可能,使产品随时可交。过去公司做测试可能需要十几、二十几个组件,集成一次往往要一两个小时,费力费时,而且复杂容易出错,而一旦配置出错的话耗时会更久。因此,一次集成测试一周才会做一次,测出Bug要到下一周才能更新,再做测试,这个周期会非常漫长。而持续集成的意义就在于减少风险,和重复的过程,最终提高工作效率。
关于devops的其他一些介绍 http://www.gzhphb.com/article/20/201544.html
2. GitLab CI中的一些概念
(1) Pipeline
- 一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,比如自动构建、自动进行单元测试、自动进行代码检查等流程 ;
- 任何提交或者 Merge Request 的合并都可以触发 Pipeline ;
(2) stages
- stages 表示构建阶段,就是上面提到的流程 ;
- 可以在一次 Pipeline 中定义多个 stage ;
- stages有如下特点 :
- 所有 stages 会按照顺序运行,即当一个 stage 完成后,下一个 stage 才会开始
- 只有当所有 stages 成功完成后,该构建任务 (Pipeline) 才算成功
- 如果任何一个 stage 失败,那么后面的 stages 不会执行,该构建任务 (Pipeline) 失败
(3) jobs
- job表示构建工作,表示某个stage里面执行的工作 ;
- 一个stage里面可以定义多个job ;
- jobs有如下特点 :
- 相同 stage 中的jobs 会并行执行
- 相同 stage 中的 jobs 都执行成功时,该 stage 才会成功
- 如果任何一个job 失败,那么该 stage 失败,即该构建任务 (Pipeline) 失败
(4) gitlab runner
- 执行构建任务的一个服务 ;
- 把构建任务放到runner里面而不是在CI里面做是不想把”构建”这个重任(通常较大的工程构建都比较小号资源) 放到gitlab上而影响gitlab性能。通过把gitlab runner安装到不同机器上,让这台单独的机器来执行构建任务
- 关于 gitlab server 与 gitlab runner 之间的关系以及信息交互可以通过下面这个链接看到 :