我在 gitlab 实例上有一个存储库,我想为其设置部署管道触发器。
我需要一个触发规则,如果“release”上有带有 SemVer 格式标签的新提交,该规则始终会触发管道。
存储库设置有两个分支“main”和“release”(“release”受保护,只能合并到其中,禁止直接推送)。
工作流程如下:
不幸的是我还没有找到解决方案,也不知道为什么我的版本不起作用。我认为这应该可行,它检查提交标签是否采用指定的格式以及提交是否到“release”分支。
...
rules:
- if: '$CI_COMMIT_TAG =~ /^v?\d+\.\d+\.\d+$/ && $CI_COMMIT_BRANCH == "release"'
...
TLDR(ctrl+f -> CI_COMMIT_TAG):https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
让我们只关注 Git,以获得更清晰的理解。
当您在 Git 中添加标签时,您会将标签(例如“版本 0.0.4”)固定到特定的 Git 提交。
在 Git 中,提交有祖先,但“分支”只是某些开发线的当前头。换句话说,提交捕获项目在特定时刻的状态,并且可以与同时与多个分支相关联。
因此,考虑到提交可以与多个分支相关联,GitLab(以及任何其他 CI 系统)检测您标记的分支是一项挑战。这就是为什么当您标记时,GitLab 会将其视为一个独立事件,称为 tag pipeline(而不是 branch pipeline),其中 $CI_COMMIT_TAG 可用,但 $CI_COMMIT_BRANCH 不可用。反之亦然。