我有一个gitlab管道,看起来像这样:
stages:
- build
- deploy
build:
stage: build
script: //do stuff
deploy:
stage: deploy
script: //do stuff
only:
- /^vd+.d+.d+
when: on_success
我希望它为每次提交运行构建作业,如果它有一个匹配正则表达式的标记,则运行部署步骤。它几乎可以工作,但是当我使用标签推送它时,它运行两次,一次使用部署步骤,一次不使用它。我怎样才能避免呢?
不幸的是,这是预期的行为——标签触发一个单独的管道,即使它们是与提交相同的推送的一部分。您可以使用工作流阻止此操作,但在您的情况下,它将阻止部署作业运行。
您可以使用规则来防止同一个作业在两个管道中运行,现在建议只使用/except。当与CI/CD变量结合使用时,它非常灵活。我会尝试使用bash regex操作符CI_COMMIT_TAG
:
stages:
- build
- deploy
build:
stage: build
script: //do stuff
rules:
- if: '$CI_COMMIT_TAG =~ "<your_regex>"'
when: never
- when: always
deploy:
stage: deploy
script: //do stuff
rules:
- if: '$CI_COMMIT_TAG =~ "<your_regex>"'
when: always
- when: never
从上到下读取规则,直到找到匹配。最后的全捕获规则确保:
build
总是运行,除非正则表达式匹配deploy
仅在正则表达式匹配 时运行。
这仍然会创建2个管道,但它应该可以防止构建作业运行两次而浪费时间。