【GitLab管道】needs、cache、artifacts、变量
needs
阶段并行,可无序执行作业,无需按照阶段顺序运行某些作业,可以让多个阶段同时运行
如果needs设置为指向因only/except规则而未实例化的作业,或者不存在,则创建管道时会出现yml错误
stages:
- sta1
- sta2
- sta3
job1:
stage: sta1
script:
- echo 'job1 execute'
- sleep 5
job2:
stage: sta2
needs: []
script:
- echo 'job2 execute'
- sleep 20
job3:
stage: sta3
needs: ["job1"]
script: echo 'job3 execute'
job1和job2同时执行,job3在job1执行完后执行
cache
https://zhuanlan.zhihu.com/p/105945748
缓存覆盖问题
如果不使用key,不同stage的缓存都会存在default下,生成cache.zip覆盖原来的缓存。
推荐使用以下方式:
stages:
- build
- test
job A:
stage: build
script: make build
cache:
key: same-key
paths:
- public/
job B:
stage: test
script: make test
cache:
key: same-key
paths:
- vendor/
artifacts、cache区别:
artifacts:称作"制品",一般是构建阶段生成的产物,比如C程序编译后的可执行文件,很可能是之后需要拿去测试发布。制品可以在不同的stage间传递。
cache:缓存一般用于存储项目的依赖,比如pip、npm、vendor,项目依赖变动不大的情况下使用缓存可以极大地加速构建过程。
变量
$ echo "CI_PIPELINE_SOURCE:$CI_PIPELINE_SOURCE"
CI_PIPELINE_SOURCE:push
$ echo "CI_COMMIT_REF_NAME:$CI_COMMIT_REF_NAME"
CI_COMMIT_REF_NAME:v4.7-bug-fix