在gitlab ci管道中,我知道如何设置阶段之间的依赖关系。
deploy:
stage: deploy
needs: [iac]
...
我也知道设置过滤器,
iac:
stage: iac
only:
changes:
- iac/*
...
但是如何将依赖项和过滤器设置在一起。条件为:
阶段iac
:如果iac
文件夹下的文件发生了变化,需要运行此阶段,如果没有变化,则跳过
阶段deploy
:取决于阶段iac
,
但是当跳过iac
阶段(没有变化)时,管道将会混乱。
'deploy' job needs 'iac' job, but 'iac' is not in any previous stage
您的deploy
阶段每次都在寻找iac
阶段,您需要将相同的规则应用于两个阶段。您可以使用rules关键字,因为:
只有和除了没有被积极开发。规则就是控制何时向管道中添加作业的首选关键字。
所以你可以定义一个全局规则,并将其扩展到你想要过滤的作业:
.rules:iac-changes:
rules:
- changes:
- iac/*
deploy:
stage: deploy
extends:
- .rules:iac-changes
needs: [iac]
...
iac:
stage: iac
extends:
- .rules:iac-changes
...
如果您想要运行deploy
阶段,您可以将需求设置为可选的。