开发人员常常提到的 CI/CD 是什么?
在编写 .gitlab-ci.yaml 文件的时候,有很多关键字,本文列举了一些常用&重要的关键字。
stages 关键字:定义了pipeline中各任务的执行顺序。 需要注意以下几点:
如果两个任务对应的stage名相同,则这两个任务会并行运行
一个stage成功执行完了,才能执行下一个stage(如果失败了,下一个stage将不会执行,如果想要修改该特性,可以使用when关键字,见下文)
如果想要控制某一个stage在最开始,或者最后执行,可以使用.pre
和 .post
关键字
举例( 下面样例的执行顺序是: build-job1 & build-job2并行执行 -> test1 -> deploy。)
stages:
- build
- test
- deploy
build-job1:
stage: build
script: echo "build-job1"
build-job2:
stage: build
script: echo "build-job2"
test1:
stage: test
script: echo "test"
deploy1:
stage: deploy
script: echo "deploy"
...
only/except 关键字:控制任务的触发条件。
only关键字的默认策略是[‘branches’, ‘tags’],即你提交了一个分支或者打了标签,就会触发;except 和 only 语义相反。
策略的分类:
git push
时触发tags 关键字:指定使用哪个Runner(哪个机器)去执行任务,注意与上文only关键字的tags进行区分
cache关键字:指定了需要缓存的文件夹或者文件,目的是为了加快执行速度
artifacts关键字:和cache类似,也可以缓存文件或文件夹,不同的是,这些文件可以在Gitlab的UI界面中下载,一般可用来存储Android打包生成的apk。
allow_failure关键字:允许任务失败,任务失败将不会影响pipeline失败。
dependencies关键字:定义了任务的依赖关系,比如依赖其他的项目、库、工具、任务等。
variables关键字:定义局部变量(只在当前的任务中生效)
when关键字:可以手动修改stage原有的执行规则。一共有五个值:
更多关键字参考:https://docs.gitlab.cn/jh/ci/yaml/
来一个完整的 .gitlab-ci.yml 例子:
stages: # 定义了两个stage,先 build 后 test
- build
- test
cache: # 定义 cache 缓存文件夹路径
paths:
- cache_dir/
variables: # 定义了全局变量,所有任务中的NVIDIA_GROUP变量都是 xxx
NVIDIA_GROUP: xxx
build-job:
stage: build
variables:
DOCKER_IMAGE: $REGISTRY/$IMAGE_ID # 专属于 build-job 的局部变量
only: # 当前任务只会在打 tag 和master 分支有提交时才会触发
- tags
- master
tags: # 指定当前任务在 machine1 这台机器上执行
- machine1
script: # 当前任务的执行脚本
- echo "build-job is runing"
cache: # 当前任务的缓存文件夹
- binaries/
artifacts:
paths:
- html_doc/
allow_failure: true # 允许当前任务失败
test-job:
stage: test
dependencies: # 当前任务依赖 build-job 的执行结果
- build-job
only: # 当前任务只在 master 分支有所提交的时候才会触发
- master
script:
- echo "test-job is running"
参考资料: