Gitlab-CI:根据上一阶段的状态触发一个阶段

时间:2018-09-02 17:20:23

标签: gitlab gitlab-ci

enter image description here

您好-我正在使用Gitlab 10.x企业版。

这是在生产部署到具有八个服务器的环境的情况下。要求是首先部署到一台服务器,然后几天后只需按一个按钮就可以部署到其余服务器。

管道阶段:   发行标签创建->生产一台服务器的部署-> OneButtonPush-> DeploytoAllServers

问题:

如何将阶段“ OneButtonPush ”和“ DeploytoAllServers ”之间的依赖关系联系起来?仅当“ OneButtonPush ”阶段中的作业状态成功时,才应启动“ DeploytoAllServers ”阶段。 “ DeploytoAllServers ”阶段将具有并行作业以部署到每个服务器。

我很少根据Gitlab CI文档进行尝试,但没有成功。此外,可以在GitLab-CI的上下文中使用滚动部署的概念。

谢谢!

2 个答案:

答案 0 :(得分:0)

在Gitlab CI中,stages一个接一个地运行。每个阶段可以有多个并行运行的jobs

根据您的用例,您需要分别具有不同的阶段,分别用于发布标签创建,生产OneServer部署,OneButtonPush和DeploytoAllServers。通过在作业定义中指定when: manual,可以为特定作业(在您的情况下为OneButtonPush)设置手动触发器。

默认情况下,如果有等待手动触发的作业,则考虑手动触发的作业成功后,其他阶段的作业将开始执行。要更改此行为,将需要使用allow_failure: false。关于here

上的allow_failure的模式详细信息

答案 1 :(得分:0)

如果您只想在 specific 获得成功之后运行阶段,您可以使用需求

示例

image: maven:latest

stages:
  - deploy_dev_lambda
  - test_dev_lambda

deploy_dev_lambda:
  stage: deploy_dev_lambda
  image: maven:latest
  script:
    - ./deployLambda
  environment: dev
  variables:
    TARGET_ENV: "dev"
    TAG_NAME: main-$CI_COMMIT_SHORT_SHA

test_dev_lambda:
  stage: test_dev_lambda
  needs:
    - deploy_dev_lambda
  script:
    - ./testLambda

所以 test_dev_lambda 只在 deploy_dev_lambda 阶段之后运行,如果阶段 deploy_dev_lambda 失败,test_dev_lambda 不会被执行。