如何仅在标记的Master分支上运行.gitlab-ci.yml作业?
job:
script:
- echo "Do something"
only:
- master
- tags
如果存在任何条件,则上述代码将运行:主分支或标记的提交。
我的目标是让这个生产部署运行,但它需要它在Master分支上并且它被标记(带有版本)。否则,我会有另一份工作,如果它缺少一个标签,就会推动升级。
答案 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)
答案 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'
- /^(?!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