我正在参加「掘金·启航计划」
作者按:
CICD自动化流水线的使用,使得研发效能提升,运维也变得更加简单,用自动化代替人工重复的操作,现在主流的自动化流水线软件有很多,今天研究一下gitlab-cicd以及ci文件使用。
1、基础
gitlab cicd是gitlab一部分,用于持续集成交付和部署
要想使用gitlab cicd,有两个,一个是托管在git代码仓库的应用程序的相关代码,还一个就是仓库根目录中名为.gitlab-ci.yml的文件,包含CI/CD的配置,要确保有可用的runnner执行定义的作业,先注册runner。
关于推送.gitlab-ci.yml到gitlab:
l git add .gitlab-ci.yml
l git commit -m “add gitlab-ci”
l git push origin master
关于gitlab-runner,可以查看我另一篇文章详述,可以二进制或者镜像安装,然后向gitlab申请注册成为runner,带有其自定义标签,就可以承担一些自动化任务。
2、定义
ci文件中包含可以定义的那些内容
(1)要运行的脚本
(2)要包含的其他配置文件和模板
(3)依赖项和缓存
(4)要按顺序运行的命令或者其他并的命令
(5)应用程序部署的位置
3、小技巧
创建第一个ci文件后,可以使用gitlab自带的流水线编辑器对文件进行编辑,有啥好处,一个是自动语法突出显示和验证来编辑流水线配置,查看cicd配置可视化,可以图形化表示
4、关键字
(1)配置流水线行为的全局关键字
default 作业关键字的自定义默认值,全局关键字
创建流水线,每个默认值都会复制到所有未定义该关键字的作业
(2)stages 流水线节段的名称和顺序
用stages 定义包含作业组的阶段,是为流水线全局定义的,在作业中使用stage来定义作业属于那个阶段
默认流水线阶段
,pre
build
test
deploy
.post
stages项的书序定义了作业的执行顺序:同一阶段的作业并行运行、下一阶段的作业在上一阶段的作业成功完成后运行
l build 中的所有作业并行执行。
l 如果 build 中的所有作业都成功,test 作业将并行执行。
l 如果 test 中的所有作业都成功,deploy 作业将并行执行。
l 如果 deploy 中的所有作业都成功,则流水线被标记为 passed
如果任何作业失败,流水线将被标记为 failed 并且后续阶段的作业不会启动。当前阶段的作业不会停止并继续运行。如果作业未指定 stage,则作业被分配到 test 阶段。
workflow 控制运行的流水线类型
include 从其他yaml文件导入配置
(3)作业由作业关键字配置
job:
script: echo "test"
only:
- branches
- tags
5、关键字汇总
| 关键字 | 描述 |
|---|---|
| script | 必须参数,运行器需要执行的脚本 |
| image | 使用Docker image镜像 |
| services | 使用Docker services镜像 |
| before_script | 作业执行前需要执行的命令 |
| after_script | 作业执行后需要执行的命令 |
| stages | 定义流水线所有的阶段 |
| stage | 定义作业所处流水线的阶段(默认test阶段) |
| only | 限制作业在什么时候创建 |
| except | 限制作业在什么时候不创建 |
| tags | 作用使用的Runner运行器的标签列表 |
| allow_failure | 允许作业失败,失败的作业不影响提交的状态 |
| when | 什么时候运行作业 |
| environment | 作用部署的环境名称 |
| cache | 指定需要在job之间缓存的文件或目录 |
| artifacts | 归档文件列表,指定成功后应附加到job的文件和目录的列表 |
| dependencies | 当前作业依赖的其他作业,你可以使用依赖作业的归档文件 |
| coverage | 作业的代码覆盖率 |
| retry | 作业失败时,可以自动执行多少次 |
| parallel | 指定并行运行的作业实例 |
| trigger | 定义下游流水线的触发器 |
| include | 作业加载其他YAML文件 |
| extends | 控制实体从哪里继承 |
| pages | 上传GitLab Pages的结果 |
| retry | 作业失败时,可以自动执行多少次 |
| variables | 定义环境变量 |
注意
不推荐在全局范围内定义 image、services、cache、before_script 和 after_script。可能会从未来的版本中删除支持。
6 、例子
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job:
stage: test
script:
- echo "This job tests something"
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
GITLAB_USER_LOGIN 和 $CI_COMMIT_BRANCH 是在作业运行时填充的预定义变量。
stage 意思就是自动执行的顺序,一个satge中的作业会并行运行
stages:
- build
- test
- deploy
如果任何作业失败,流水线将被标记为 failed 并且后续阶段的作业不会启动。
到这里对gitlab-ci文件使用有一个大致了解,其他功能还需更深入学习,祝学习顺利!