条件运行具有依赖性的任务



在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阶段,您可以将需求设置为可选的。

最新更新