我无法找到如何忽略 .gitlab-ci.yml 中所做的更改以触发作业的解决方案。到目前为止,我已经尝试过以下选项:
except:
changes:
- .gitlab-ci.yml
和
only
- Branch A
但每次我在 .gitlab.ci-yml 文件中进行更改时,阶段 B 的作业都会添加到管道中并显示为已跳过。
以下是 .gitlab-ci.yml 中定义的作业。在这里你有什么建议吗?
我不希望在以下情况下将阶段 B 作业添加到管道中:
i) 针对 .gitlab-ci.yml 进行推送(手动更改文件或
git push
命令)stages:
- A
- B
Stage A:
stage: A
script:
- echo "TEST"
rules:
- if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.DEV\d+/'
tags:
- runner
Stage B:
stage: B
script:
- echo "TEST"
when: manual
tags:
- runner
使用此设置,如果修改
Stage B
,则不会添加 .gitlab-ci.yml
:
stages:
- A
- B
Stage A:
stage: A
script:
- echo "Stage A"
tags:
- runner
Stage B:
stage: B
script:
- echo "Stage B"
rules:
- changes:
- ".gitlab-ci.yml"
when: never
- when: manual
tags:
- runner
否则管道中会显示
Stage B
,可以手动运行。使用 GitLab CI CE 14.1.0 进行测试。
如果要排除某些文件更改的管道,但包含其他文件更改的管道,请使用两个 if 语句:
build:
stage: build
script:
- ...
rules:
- if: $CI_COMMIT_BRANCH == "master"
changes:
- ".gitlab-ci.yml"
- "mkdocs.yml"
when: never
- if: $CI_COMMIT_BRANCH == "master"
changes:
- Dockerfile
- "*.yml"
如果第一个 if 语句匹配,则不会评估第二个 if 语句。