Car*_*ole 42 gitlab gitlab-ci gitlab-ci-runner
如何仅在标记的Master分支上运行.gitlab-ci.yml作业?
job:
script:
- echo "Do something"
only:
- master
- tags
Run Code Online (Sandbox Code Playgroud)
如果存在任何条件,则上述代码将运行:主分支或标记的提交.
我的目标是让这个生产部署运行,但它需要它在Master分支上并且它被标记(带有版本).否则,我将有另一个工作,如果它缺少一个标签将推送到暂存.
Ser*_*llo 11
此行为将在版本12中引入。
未解决的问题最近已更新:
Jason Lenny @jlenny将标题从{-Update .gitlab-ci.yml更改为支持构建条件的连接逻辑-}更改为构建条件的合并逻辑MVC·2天前
Jason Lenny @jlenny更改里程碑至12.0·2天前
(手指交叉)
一种解决方案是使用except关键字排除所有分支,再结合only在标签上运行,这样,您就可以仅在master分支中的标签上运行管道:
only:
- tags
except:
- branches
Run Code Online (Sandbox Code Playgroud)
我正在使用版本 11.3.4
感谢其他人,例如Matt Alioto,他发表了有关公开发行的文章(该标签被贴上了Product Vision 2019这样的标签,希望他们能在今年淘汰)。
对于Carlson Cole的问题,这将起作用:
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'
Run Code Online (Sandbox Code Playgroud)
- /^(?!master).+/(不使用@),则此方法无效-了解到了困难的方法 我有同样的问题。我想在推送或合并时触发部署到我们的临时环境,并且仅在应用标签时将其部署到我们的生产环境。
为此我们需要 2 个变量:$CI_COMMIT_BRANCH和$CI_COMMIT_TAG。通过这些变量,我们可以推断管道是否是由提交或标签触发的。不幸的是,第一个变量仅在提交分支时设置,而第二个变量仅在应用标签时设置。所以这不是解决方案......
因此,我选择了下一个最佳设置,仅在按指定约定和手动触发器设置标签时才进行生产发布。这是我的 .gitlab-ci.yml 文件:
stages:
- deploy:staging
- deploy:prod
deploy-to-staging:
stage: deploy:staging
rules:
- if: $CI_COMMIT_BRANCH == 'master'
script:
- echo "Deploying to Staging..."
deploy-to-production:
stage: deploy:prod
rules:
- if: $CI_COMMIT_TAG =~ /^v(?:\d+.){2}(?:\d+)$/
when: manual
script:
- echo "Deploying to Production..."
Run Code Online (Sandbox Code Playgroud)
如果您确实想自动执行此操作,则必须编写一些脚本来查明应用的标记是否实际上属于主分支上的提交。查看 GitLab 问题跟踪器上的评论以获取更多信息:https://gitlab.com/gitlab-org/gitlab-foss/-/issues/31305#note_28580169
我成功了,这是我的工作代码段,其他所有代码都不适合我
only:
- tags # please mention the 's' compared to Sergio Tomasello's solution
except:
- branches
Run Code Online (Sandbox Code Playgroud)
我用11.4.3
多年后,仍在尝试在 master 分支上的标签上启动工作......
Gitlab 的问题已关闭:https://gitlab.com/gitlab-org/gitlab-foss/-/issues/27818
不可能在 master 分支上发现标签,因为 Git 不以这种方式工作。分支和标签是单独的引用,每个引用都指向一个提交。因此,标签与分支没有关系。
我的解决方案是检查标签名称以检测它是否代表生产版本:
deploy-prod:
stage: deploy-manual
only:
variables:
- $CI_COMMIT_TAG =~ /^v\d+.\d+.\d+-?.*$/
when: manual
Run Code Online (Sandbox Code Playgroud)
正则表达式匹配 semver 标签名称,例如:
gitlab-ci尚不支持此行为,尽管有一个开放的问题要添加。
同时,我也听到了一些传闻,
only:
- master
only:
- tags
Run Code Online (Sandbox Code Playgroud)
将完成这项工作(以及传闻不会完成)。
小智 5
文档实际上是这样说的,only并且except尚未开发,用户应该使用它rules。
这是一个仅在标签上运行的示例。
deploy-to-prod:
stage: deploy
rules:
- if: $CI_COMMIT_TAG
environment:
name: production
variables:
API_ENVIRONMENT: prod
when: manual
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27991 次 |
| 最近记录: |