Continuous integration 如果缓存为空,如何触发gitlab作业? 背景
考虑一个带有Continuous integration 如果缓存为空,如何触发gitlab作业? 背景,continuous-integration,gitlab,devops,Continuous Integration,Gitlab,Devops,考虑一个带有预构建和构建阶段的虚拟gitlab作业 stages: - prebuild - build 预构建阶段的唯一任务是为以后的阶段创建和缓存依赖项。只有在pythonrequirements.txt文件发生更改时才会触发prebuild阶段。build阶段有一个pull的cache:policy,这意味着它对缓存遵从prebuild。例如,假设缓存由单个文件的共享文件组成sharedfile: prebuild_job: cache: policy: pull
预构建
和构建
阶段的虚拟gitlab作业
stages:
- prebuild
- build
预构建
阶段的唯一任务是为以后的阶段创建和缓存依赖项。只有在pythonrequirements.txt
文件发生更改时才会触发prebuild
阶段。build
阶段有一个pull
的cache:policy
,这意味着它对缓存遵从prebuild
。例如,假设缓存由单个文件的共享文件组成sharedfile
:
prebuild_job:
cache:
policy: pull-push
rules:
- changes:
- requirements.txt
paths:
- sharedfile
script:
- echo "FOOBAR" > sharedfile
build_job:
cache:
policy: pull
paths:
- sharedfile
script:
- cat sharedfile
这就是我想要的-prebuild
只有在requirements.txt
更改并且build
使用其输出时才会触发(在本例中是sharedfile
但实际上是一个完整的python虚拟环境)。
这非常有效,直到在gitlab上通过Clear Runner Caches按钮手动清除缓存,然后我们必须手动重新运行预构建步骤,否则构建将继续失败,因为在清除缓存后,预构建从未重新触发
问题:
我们如何设置缓存或解决方法,以便预构建\u作业
在缓存除现有更改规则外为空时知道如何激发?。差不多
prebuild_job:
cache:
policy: pull-push
rules:
- changes:
- requirements.txt
- if: "$CACHE == {}" #<-- something like this
paths:
- sharedfile
script:
- echo "FOOBAR" > sharedfile
prebuild_job:
cache:
policy: pull-push
rules:
- changes:
- requirements.txt
- if: '"True"'
when: manual
allow_failure: true
...