将脚本附加到一个阶段 .gitlab-ci.yml

Append the script on one stage .gitlab-ci.yml

如何在 .gitlab-ci.yml 文件中的一个 stage 中附加 script 部分?

例如在这个例子中

stages:
  - stage1_name

.a:
  script:
    - echo "String 1"

.b:
  script:
    - echo "String 2"


stage1_name:
  stage: stage1_name
  extends: .a
  extends: .b
  script:
    - echo "String 3"

如何获得输出:

String 1
String 2
String 3

而不是:

String 3

我不确定 extends 的用法,但在这种情况下我通常使用 dependencies

stages:
   - stage1

script1:
  stage: stage1
  script:
       //doSomething

script2:
  stage: stage1
  dependencies:
    - script1
  script:
      //doSomething

script3:
  stage: stage1
  depencencies:
     - script2
  script:
      //doSomething

这样,script2 将仅在完成 ​​script1 之后启动,而 script3 - 仅在第二个之后启动。

这是不可能的,当你使用扩展时你会覆盖整个块。

您可以像@user3106558 示例那样使用依赖项

我的解决方案是:

stages:
  - stage1_name

.b:
  script:
    - echo "String 2"


stage1_name:
  stage: stage1_name
  before_script:
    - echo "String 1"
  extends: .b
  after_script:
    - echo "String 3"

为了不覆盖 stage_1_name 中的 script 部分,我使用了 before_script 和 after_script.

您可以像这样使用 YAML anchors

stages:
  - stage1_name

.a: &a
  - echo "String 1"

.b: &b
  - echo "String 2"

stage1_name:
  stage: stage1_name
  script:
    - *a
    - *b
    - echo "String 3"

Gitlab 13.9 引入了一个 !reference 标签,使这成为可能;

.setup:
  script:
    - echo creating environment

test:
  script:
    - !reference [.setup, script]
    - echo running my own command