如何防止gitlab管道在推标签时运行两次



我有一个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个管道,但它应该可以防止构建作业运行两次而浪费时间。

相关内容

  • 没有找到相关文章

最新更新