kit*_*hra 6 gitlab gitlab-ci gitlab-pipelines
我正在尝试运行一个管道,其中最后阶段取决于前一个阶段,其中的作业是有条件的和手动的。
我制作了这个示例 .gitlab-ci.yml 来演示这一点。我正在分三个阶段进行工作:
stages:
- test
- publish
- create tag
Run Code Online (Sandbox Code Playgroud)
测试阶段有一项工作
# Tests Stage
run tests:
stage: test
script:
- run the tests
Run Code Online (Sandbox Code Playgroud)
发布阶段的三个作业,都是手动的,仅在某些文件发生更改时存在
.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
Run Code Online (Sandbox Code Playgroud)
最后是“创建标签”阶段,我只想在其中一项发布作业完成时运行该阶段。
# Create Tag Stage
create tag with all packages:
stage: create tag
script:
- git tag
Run Code Online (Sandbox Code Playgroud)
通常我可以用来needs使创建标签作业依赖于发布作业。但是,例如,如果我只在 a/ 目录中进行更改,则会收到以下错误,因为仅存在“发布包 a”:
needs:
- "publish package a"
- "publish package b"
- "publish package c"
Run Code Online (Sandbox Code Playgroud)
我真正想要的是类似的东西
needs:
- "publish package a" if exists
- "publish package b" if exists
- "publish package c" if exists
Run Code Online (Sandbox Code Playgroud)
但据我所知,还没有这样的事情。如何才能仅在发布阶段的现有作业完成后才运行创建标签作业?
您正在寻找的是Optional Needs在版本 13.10 中通过功能标志引入的,并在 14.0 中升级(无需功能标志即可使用)。这可以让你拥有这样的工作:
build:
stage: build
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
rspec:
stage: test
needs:
- job: build
optional: true
Run Code Online (Sandbox Code Playgroud)
在此示例中,build仅当管道用于分支(而不是标签、合并请求等)并且分支名称与项目的默认分支相同时,作业才会运行。如果不是这种情况,则该作业根本不会添加到管道中,因此我们需要确保该作业的needsforrspec是可选的。
通过将optional: true属性添加到needs数组中,我们告诉 Gitlab 该rspec作业需要该build作业(如果存在)。
所以,对于你的例子:
stages:
- test
- publish
- create tag
# Tests Stage
run tests:
stage: test
script:
.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
needs:
- job: "publish package a"
optional: true
- job: "publish package b"
optional: true
- job: "publish package c"
optional: true
script:
- git tag
Run Code Online (Sandbox Code Playgroud)
此功能在问题 30680中引入。
| 归档时间: |
|
| 查看次数: |
5181 次 |
| 最近记录: |