首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多阶段还是多阶段?

多阶段还是多阶段?
EN

Stack Overflow用户
提问于 2019-10-24 16:52:28
回答 1查看 10.9K关注 0票数 3

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

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

我不知道该如何做:我尝试使用多个扩展,但它只需要在我的管道中的最后一个(bashB)。

代码语言:javascript
复制
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 (例如,我只使用了2台服务器)。

EN

回答 1

Stack Overflow用户

发布于 2019-10-30 09:56:47

在GitLab中使用多个扩展时,某些值将不会合并,而是被覆盖。如果您在这里查看文档:

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

他们写道:

用于合并的算法是“最近的作用域胜利”,因此来自最后一个成员的键总是隐藏在其他级别上定义的任何内容。

并不是只有您希望某个功能能够合并脚本而不是覆盖它们。这里有一个关于GitLab的公开话题来做您描述的事情:

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

同时,只看您提供的示例,通过手动将bashAbashB合并到一个作业中,您可以得到类似于您想要的东西:

代码语言:javascript
复制
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58545881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档