【问题标题】:Conditional auto-deploy based on git tag in gitlab CIgitlab CI 中基于 git tag 的条件自动部署
【发布时间】:2017-03-31 12:26:32
【问题描述】:

我正在使用 gitlab CI 为我的网站设置部署过程。 我有一个production 网站和一个带有staging 部署的子域。

假设我有不同的分支:master 和 release。我有一个配置为 .yaml 的文件: 如果我推送 master,我会在 production 上进行部署(带有手动选项),如果我推送我的分支版本,我会在 staging 上进行自动部署。

git push origin master 

部署到生产环境(手动验证),

git push origin release 

部署到登台。并且任何其他被推送的分支都不会部署。

我们是几个人一起工作,有时,当在 git push 上指定标签(例如 specifictag)时,我们希望能够在 staging 上部署另一个分支(例如 feature):

git tag specifictag    
git push origin feature --tags

这对我很有用,因为有时一些开发人员希望在合并发布之前测试他们的代码,而我们不想创建第三个环境。当然,我们不想在每次推送任何分支时都进行部署。

stages:

  - staging

  - production

test-deployment:

  stage: staging

  script:

    - [...]

  only:

    - release

  tags:

    - extranetserver

prod-deployment:

  stage: production

  script:

    - [...]

  only:

    - master

  tags:

    - extranetserver

  when: manual

有没有人知道如何使用标签作为在推送特定标签时强制部署的一种方式? 谢谢!

【问题讨论】:

  • 正在部署什么样的网站。哪个服务器。只是询问是否可以以不同的方式解决原始问题。
  • 它并不能准确回答您的问题,但您是否查看了 Review Apps docs.gitlab.com/ce/ci/review_apps
  • 感谢大家提出的问题和建议。我们的网络应用程序非常多样化,它收集了不同语言的许多算法和功能,所以我正在寻找一些非常通用和适应性强的东西。我们称我们的网站为“实验室”,因为它有许多功能。
  • @Jawad :当我询问时,我没有查看 ReviewApps,它看起来很有趣!但是,我不确定它是否可以帮助我,因为如果我理解得很好,它每次都会创建另一个网站“子域”。我觉得我不想这样做。我错了吗?
  • 实际上你定义了它的部署方式。它可能在子域上,但也可能在您的暂存子域上,但在不同的端口上。我认为它主要被设计为与 kubernetes 或 openshift 等可以动态创建子域的平台一起使用。因此可能不适用于您的用例。

标签: git deployment gitlab gitlab-ci


【解决方案1】:

你可以使用正则表达式,比如

test-deployment:
    only:
        - /^staging-/

并标记您的提交,以“staging-”开头。推送时,作业应该运行。

【讨论】:

  • 它工作得非常好,这正是我打算做的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多