如何仅在标记分支上运行gitlab-ci.yml作业?

时间:2017-03-14 20:31:51

标签: gitlab gitlab-ci gitlab-ci-runner

如何仅在标记的Master分支上运行.gitlab-ci.yml作业?

job:
  script:
  - echo "Do something"
  only:
  - master
  - tags

如果存在任何条件,则上述代码将运行:主分支或标记的提交。

我的目标是让这个生产部署运行,但它需要它在Master分支上并且它被标记(带有版本)。否则,我会有另一份工作,如果它缺少一个标签,就会推动升级。

6 个答案:

答案 0 :(得分:5)

此行为将在版本12中引入。

Open issue最近更新:

  

Jason Lenny @jlenny将标题从{-Update .gitlab-ci.yml更改为   支持构建条件的合取逻辑-}到合取逻辑   适用于MVC的构建条件·2天前

     

Jason Lenny @jlenny将里程碑更改为12.0·2天前

(手指交叉)

一种解决方案是使用&关键字排除所有分支,并结合except在标签上运行,这样,您就只能在master分支的标签上运行管道:

only

我正在使用 only: - tags except: - branches

答案 1 :(得分:3)

gitlab-ci尚不支持此行为,但有open issue添加它。

与此同时,我也听到了轶事报道

only:
  - master
only:
  - tags

将完成工作(以及轶事报告,它不会)。

答案 2 :(得分:3)

我成功了,这是我的工作代码段,其他所有代码都不适合我

only:
 - tags  # please mention the 's' compared to Sergio Tomasello's solution
except:
 - branches

我使用11.4.3

答案 3 :(得分:3)

感谢其他人,例如 Matt Alioto ,他们发布了有关open issue(标记为Product Vision 2019的消息,因此希望他们能在今年将其淘汰)。

专门针对卡尔森·科尔的问题,这将起作用:

job_for_master_no_tags:
  stage: deploy
  script:
  - echo "Release to Staging"
  only:
  - master

job_for_master_tags_only:
  stage: deploy
  script:
  - echo "Release to Production"
  only:
  - tags
  except:
  - /^(?!master).+@/    # Ruby RegEx for anything not starting with 'master'
  • 要查看此RegEx的工作原理,请查看https://rubular.com/r/1en2eblDzRP5Ha
  • 我在GitLab版本11.7.0上对此进行了测试,并且可以正常工作
    • 注意:如果您尝试使用- /^(?!master).+/(不使用@)将无法正常工作-了解到这很困难

答案 4 :(得分:0)

我的解决方案是

job:
  script:
  - echo "Do something"
  only: 
    refs:
      - master
      - tags
    variables:
      - $CI_COMMIT_BRANCH == "master"

答案 5 :(得分:0)

到目前为止,gitlab 中还没有针对此问题的正确构建解决方案。为了跟踪正确解决方案的开发并保持更新的工作解决方法,我创建了:Gitlab CI: Run Pipeline job only for tagged commits that exist on protected branches