gitlab-ci 检查分支是否是标签,然后根据分支类型执行命令

Mar*_*arc 2 gitlab gitlab-ci

我想检查 gitlab-ci.yml 中的单个阶段中的分支是否是标签。然后根据分支是否是标签,执行一组特定的命令:

IF tag:
   A SET OF COMMANDS
ELSE:
   ANOTHER SET OF COMMAND
Run Code Online (Sandbox Code Playgroud)

我知道只有: -tags 可用于检查分支是否是标签,但是如何检查分支,然后在单个 gitlab-ci 阶段中根据分支类型应用不同的命令集?在这种情况下,如果分支不是标签,我将应用一组不同的命令。

some_stage:
  only:
    - tags
  script:
    - | SET OF COMMANDS
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用 Gitlab-CI预定义变量

  • CI_COMMIT_BRANCH(提交分支名称。在分支管道中可用,包括默认分支的管道。在合并请求管道或标记管道中不可用。)
  • CI_COMMIT_TAG(提交标签名称。仅在标签管道中可用。)

仅当从分支触发管道时,“CI_COMMIT_BRANCH”变量才会保存分支名称,否则它将不保存任何值。这同样适用于“CI_COMMIT_TAG”变量,该变量仅在从标签触发管道的情况下保存值。

您可以使用规则来检查这些变量并决定是否要执行作业。例如,如果您只想从标签构建 docker 镜像:

build_docker:
  rules:
    - if: '$CI_COMMIT_TAG != null && $CI_BUILD_TAG =~ *SOME_REGEX*'
      when: on_success
Run Code Online (Sandbox Code Playgroud)

更新:或者您可以使用脚本内的变量来进行检查,但我建议您将逻辑分成多个作业。一个用于标签工作,另一个用于分支工作。并指定作业何时执行的规则。

最后一件事:有一个名为CI_BUILD_TAG的已弃用标签,因此如果您使用的是旧版本的 gitlab。