在GitLab CI中获取分支名称

58
在我的Gitlab CI中,我有一个阶段通过api调用触发另一个阶段,我想将当前分支名称作为参数传递给持有触发器的另一个项目。我使用了CI_COMMIT_REF_NAME来实现这一点,似乎可以工作,但现在我只在将分支合并到主分支时调用该阶段,CI_COMMIT_REF_NAME总是显示“master”。 在文档中,它说“建立项目的分支或标签名称”,我是否正确理解它保留了我的工作分支的目标分支? 我也尝试使用git symbolic-ref HEAD | sed 's!refs\/heads\/!!'获取gitlab ci中的当前分支,但该分支为空。 CI_COMMIT_REF_NAME是我正在寻找的变量,出了些问题还是我需要其他东西? 谢谢您的帮助。

这也可能是有用的 https://gitlab.com/gitlab-org/gitlab/-/issues/32784 - jan b
2个回答

92

我不确定你所说的“通过API调用触发另一个阶段的阶段”是什么意思。但是,一般来说,GitLab CI作业是CI流水线的一部分,而CI流水线是为分支或标签创建的。

CI_COMMIT_REF_NAME变量包含创建流水线的分支或标签的名称。

CI_MERGE_REQUEST_TARGET_BRANCH_NAME是“合并请求目标分支的名称”。

来自GitLab预定义变量参考文档


6
对我来说,echo ${CI_COMMIT_BRANCH} 是正确的选择。 - Boommeister

15

请注意,像下面这样检查$CI_COMMIT_BRANCH值的规则(旨在防止在将PR合并到master分支时运行此步骤)不会按预期工作:

build-python-c4d:
  stage: pre
  rules:
    - if: '$CI_COMMIT_BRANCH != "master"'

文档 中了解到 $CI_COMMIT_BRANCH 的定义:

提交所在的分支名称。在分支流水线中可用,包括默认分支的流水线。不适用于合并请求流水线或标签流水线。

相反,您应该使用:

build-python-c4d:
  stage: pre
  rules:
    - if: ($CI_COMMIT_BRANCH != "master" && $CI_COMMIT_REF_NAME != "master")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接