CICD是什么
我们的开发模式经历了如下的转变:瀑布模型->敏捷开发→DevOps(Development、Operations的组合词,是一组过程、方法与系统的统称)
后来随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法,关于持续集成、持续交付、持续部署,总结如下:
- 持续集成的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
- 持续交付的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
- 持续部署是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。
持续集成的好处是什么?
持续集成可以使问题尽早暴露,从而也降低了解决问题的难度,正如老马所说,持续集成无法消除bug,但却能大大降低修复的难度和时间。
持续交付的好处是什么?
持续交付的好处在于快速获取用户反馈;适应市场变化和商业策略的变化。开发团队保证每次提交的修改都是可上线的修改,那么决定何时上线,上线哪部分功能则完全由产品业务团队决定。
虽然持续交付有显著的优点,但也有不成立的时候,比如对于嵌入式系统的开发,往往需要软硬件的配合。
持续部署的好处是什么?
持续部署的目标是通过减少批量工作的大小,并加快团队工作的节奏,帮助开发团队在其开发流程中消除浪费。这使团队能够一直处于一种可持续的平稳流状态, 让团队更容易去创新、试验,并达到可持续的生产率
市面上的CI有很多,如果在github上搜一下ci工具,也会搜到很多,比如:
相关概念
runner
我们可以简单的把 Gitlab runner 给理解成.gitlab-ci.yml
文件内容的执行者,.gitlab-ci.yml
告诉了 Gitlab runner 去做什么。
Gitlab runner 不是一个配置项,它是需要专门部署的,比如用 docker 部署一个 runner 镜像到可以连接内网的容器。也可以使用公司内配好的 shared runners.
runner是一个单独的程序需要安装,并配置到gitlab
pipeline(管道流水线)
- 一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程(
Stage
),比如自动构建、自动进行单元测试、自动进行代码检查等流程 ; - 任何提交或者 Merge Request 的合并都可以触发 Pipeline ;
Stage(构建阶段)
- Stage表示构建阶段,就是上面提到的流程 ;
- 可以在一次
Pipeline
中定义多个Stage
; - Stage有如下特点 :
- 所有 stages 会按照顺序运行,即当一个 stage 完成后,下一个 Stage才会开始
- 只有当所有 Stage 成功完成后,该构建任务
Pipeline
才算成功 - 如果任何一个 Stage失败,那么后面的 Stage 不会执行,该构建任务 (Pipeline) 失败
阶段是对批量的作业的一个逻辑上的划分,每个 pipeline
都必须包含至少一个 Stage
。多个 Stage是按照顺序执行的,如果其中任何一个 Stage失败,则后续的 Stage不会被执行,整个 CI 过程被认为失败。
Jobs(任务)
- job表示构建工作,表示某个stage里面执行的工作 ;
- 一个stage里面可以定义多个job ;
- jobs有如下特点 :
- 相同 stage 中的jobs 会并行执行
- 相同 stage 中的 jobs 都执行成功时,该 stage 才会成功
- 如果任何一个job 失败,那么该 stage 失败,即该构建任务 (Pipeline) 失败
.gitlab-ci.yml 文件
.gitlab-ci.yml 文件被用来管理项目的 runner 任务,Gitlab CI通过.gitlab-ci.yml文件管理配置job,该文件定义了statge顺序、job应该如何触发和工作、执行什么脚本、如何构建pipeline等流程
yml和json写法的对比
例子1
1.数组写法
{ "array": ["red", "blue", "yellow"] }
2.yml写法
array: - red - blue - yellow
例子2
1.对象写法
{ "student1": { "name": "小明" }, "array": ["red", "blue", "yellow"], "student2": { "name": "小明" } }
2.json写法
# 我是注释 student1: name: 小明 array: - red - blue - yellow student2: name: 小明
简单例子
如
这里的四个Statge(阶段): Verify、Build、Dockerpush、Deploy
四个,这四个阶段组成一条Pipeline
每个阶段都有一个job,所以总共四个job,也就是unit-test
、java-package
、docker-push
、service-1
这四个,当然,每个stage可以由多个job组成
对应.gitlab-ci.yml
## 定义pipeline流程:verify->build->dockerpush->deploy stages: - verify - build - dockerpush - deploy #单元测试 unit-test: stage: verify # 属于哪个流程 tags: - test-cicd # 在哪个runner上面执行,在注册runner可以自定义 script: - echo unit-test # 执行脚本 #java编译 java-package: stage: build tags: - test-cicd script: - echo build #push镜像 docker-push: stage: dockerpush tags: - test-cicd script: - echo docker-push #deploy service-1: stage: deploy tags: - test-cicd script: - echo deploy
runner执行流程
标签:runner,CICD,Gitlab,持续,job,Stage,yml,stage From: https://www.cnblogs.com/LQBlog/p/17919739.html