您好-我正在使用Gitlab 10.x企业版。
这是在生产部署到具有八个服务器的环境的情况下。要求是首先部署到一台服务器,然后几天后只需按一个按钮就可以部署到其余服务器。
管道阶段: 发行标签创建->生产一台服务器的部署-> OneButtonPush-> DeploytoAllServers
问题:
如何将阶段“ OneButtonPush ”和“ DeploytoAllServers ”之间的依赖关系联系起来?仅当“ OneButtonPush ”阶段中的作业状态成功时,才应启动“ DeploytoAllServers ”阶段。 “ DeploytoAllServers ”阶段将具有并行作业以部署到每个服务器。
我很少根据Gitlab CI文档进行尝试,但没有成功。此外,可以在GitLab-CI的上下文中使用滚动部署的概念。
谢谢!
答案 0 :(得分:0)
在Gitlab CI中,stages一个接一个地运行。每个阶段可以有多个并行运行的jobs。
根据您的用例,您需要分别具有不同的阶段,分别用于发布标签创建,生产OneServer部署,OneButtonPush和DeploytoAllServers。通过在作业定义中指定when: manual
,可以为特定作业(在您的情况下为OneButtonPush)设置手动触发器。
默认情况下,如果有等待手动触发的作业,则考虑手动触发的作业成功后,其他阶段的作业将开始执行。要更改此行为,将需要使用allow_failure: false
。关于here
答案 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
不会被执行。