我正在尝试运行一个管道,其中最后阶段取决于前一个阶段,其作业是有条件的和手动的。
我做了这个例子 .gitlab-ci.yml 来证明这一点。我正在处理三个阶段:
stages:
- test
- publish
- create tag
测试阶段有一项工作
# Tests Stage
run tests:
stage: test
script:
- run the tests
Publish 阶段的三个作业,都是手动的,仅在某些文件发生更改时才存在
.publish:
stage: publish
script:
- publish x
rules:
- changes:
- $DIR/**/*
when: manual
# Publish Stage
publish package a:
variables:
DIR: a
extends:
- .publish
publish package b:
variables:
DIR: b
extends:
- .publish
publish package c:
variables:
DIR: c
extends:
- .publish
最后是创建标签阶段,我只想在其中一个发布作业完成后运行。
# Create Tag Stage
create tag with all packages:
stage: create tag
script:
- git tag
通常我可以needs
用来使 Create Tag 作业依赖于发布作业。但是,例如,如果我只在 a/ 目录中进行更改,我将收到以下错误,因为只存在“发布包 a”:
needs:
- "publish package a"
- "publish package b"
- "publish package c"
我真正想要的是
needs:
- "publish package a" if exists
- "publish package b" if exists
- "publish package c" if exists
但据我所知,没有这样的事情。只有在 Publish 阶段的现有作业完成后,我才能运行 Create Tags 作业?