多个扩展还是多个阶段?

时间:2019-10-24 16:52:28

标签: gitlab-ci

我想拥有一个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台服务器)。

1 个答案:

答案 0 :(得分:0)

在GitLab中使用多重扩展时,某些值将不会合并,但会被覆盖。如果您在此处查看文档:

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

他们写道:

  

用于合并的算法是“最近作用域获胜”,因此来自最后一个成员的键将始终遮盖其他级别定义的任何内容

并非只有一个人希望功能能够合并脚本而不是覆盖脚本。这是您在GitLab上做的事情的公开问题:

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