gpt4 book ai didi

gitlab-ci - 多个扩展或多个阶段?

转载 作者:行者123 更新时间:2023-12-05 01:39:19 25 4
gpt4 key购买 nike

我想要一个 CI 在不同的生产服务器(服务器 1、服务器 2、服务器 3 等)上部署两个命令(“bash X”和“bash Y”)。

我寻找了多个阶段,但它似乎没有回答我的问题。我真的不在乎它是并行运行还是在 A 之后运行 B。(手册部分用于调试)

我不知道该怎么做:我尝试了多个扩展,但它只占用了我管道中的最后一个 (bashB)。

stages:
- get_password
- bashA
- bashB

get_password:
stage: get_password

# Steps

.bashA:
stage: bashA
script:
- lorem ipsum
when: manual
only:
changes:
- script/bashA.sh

.bashB:
stage: bashB
script:
- ipsum loreem
when: manual
only:
changes:
- script/bashB.sh

# SRV1
deploy-srv1:
extends:
- .bashA
- .bashB
variables:
SRV_1: urlsrv1

# SRV2
deploy-srv2:
extends:
- .bashA
- .bashB
variables:
SRV_1: urlsrv2

我只是希望能够在 X 服务器上部署 bashA 和 bash B(我只以 2 台服务器为例)。

最佳答案

在GitLab中使用multiple extend时,有些值不会被合并,而是会被覆盖。如果您在此处查看文档:

https://docs.gitlab.com/ee/ci/yaml/#extends

他们写道:

The algorithm used for merge is “closest scope wins”, so keys from the last member will always shadow anything defined on other levels

您并不是唯一一个希望功能能够合并脚本而不是覆盖它们的人。这是 GitLab 上的一个 Unresolved 问题,可以执行您所描述的操作:

https://gitlab.com/gitlab-org/gitlab/issues/16376

与此同时,仅查看您提供的示例,您可以通过手动将 bashAbashB 合并到一个作业中来获得您想要的东西:

stages:
- get_password
- bash

get_password:
stage: get_password

# Steps

.bash_both:
stage: bash
script:
- lorem ipsum
- ipsum loreem
when: manual
only:
changes:
- script/bashA.sh
- script/bashB.sh

# SRV1
deploy-srv1:
extends:
- .bash_both
variables:
SRV_1: urlsrv1

# SRV2
deploy-srv2:
extends:
- .bash_both
variables:
SRV_1: urlsrv2

关于gitlab-ci - 多个扩展或多个阶段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com