我想拥有一个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台服务器)。
答案 0 :(得分:0)
在GitLab中使用多重扩展时,某些值将不会合并,但会被覆盖。如果您在此处查看文档:
https://docs.gitlab.com/ee/ci/yaml/#extends
他们写道:
用于合并的算法是“最近作用域获胜”,因此来自最后一个成员的键将始终遮盖其他级别定义的任何内容
并非只有一个人希望功能能够合并脚本而不是覆盖脚本。这是您在GitLab上做的事情的公开问题:
https://gitlab.com/gitlab-org/gitlab/issues/16376
同时,仅查看您提供的示例,就可以通过手动将bashA
和bashB
合并到一项工作中来获得所需的内容:
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