在gitlab-ci中匹配分支时如何使用变量?

时间:2019-03-06 21:33:38

标签: gitlab-ci

如何匹配分支名称变量?如果将变量设置为1.1.0,我希望它仅匹配该版本的发行分支。我似乎无法在此处或正则表达式中进行变量替换(如注释所示)。有什么选择吗? 1.1.0实际上将来自项目变量,而不是文件中的硬编码,因此在这里硬编码实际上不是一个选择。

这似乎没有进行变量替换。

stages:
  - build

variables:
  buildNum: $CI_PIPELINE_ID
  stagingVersion: 1.1.0

before_script:
  - export MYTEAM_BUILD_NUM=${buildNum}
  - export MYTEAM_VERSION=${stagingVersion}

build_staging:
  stage: build
  only:
    - release/v${stagingVersion}@myTeam/myProject
    # - /^release\/v${stagingVersion}@myTeam\/myProject$/
  script:
    - doStuff

1 个答案:

答案 0 :(得分:0)

我能够提出一个hacky解决方案来实现这一目标。这不是很好,但是可以完成工作。它将使符合分支条件但不符合分支版本条件的作业失败:

  only:
    - /^release\/v\d+.\d+.\d+$/@myTeam/myProject
  script:
    - if ! [ "${CI_COMMIT_REF_NAME}@${CI_PROJECT_PATH}" = "release/v${stagingVersion}@myTeam/myProject" ]; then echo "Staging branch? NO; Exiting"; exit 1; else echo "Staging branch? YES; Continuing"; fi
  1. only部分首先向下过滤到与release/v0.0.0@myTeam/myProject格式匹配的分支
  2. 然后脚本的第一行运行bash命令,该命令将stagingVersion(在gitlab项目变量中设置为暂存环境的当前版本)与$CI_COMMIT_REF_NAME
  3. 进行比较。
  4. 如果分支匹配,则打印成功消息;如果分支不匹配,则运行exit 1并导致构建失败