Как выполнять одни задачи параллельно, а другие последовательно? - PullRequest
1 голос
/ 30 мая 2019

Я хотел бы запускать некоторые задачи CD / CI параллельно (например, независимые сборки докера) и некоторые другие последовательно (например, выгрузка реестра этих образов после их сборки).

В документации приведен пример отдельных задач, которые по умолчанию выполняются параллельно:

test:
  script: cat file1.txt file2.txt | grep -q 'Hello world'

package:
  script: cat file1.txt file2.txt | gzip > packaged.gz
  artifacts:
    paths:
    - packaged.gz

Они задают последовательность этих задач через запись stages:

stages:
  - test
  - package

Как я могу смешать оба? Чтобы, скажем, задачи build_one и build_two выполнялись параллельно, а затем (последовательно) package? Что-то вроде

stages:
  - build_one, build_two   # <-- these two run in parallel
  - package   # <-- this one runs only when both parallel tasks above completed successfully

1 Ответ

1 голос
/ 30 мая 2019

Каждой задаче может быть назначен этап, на котором она выполняется, и этапы выполняются последовательно в порядке их определения.Если несколько задач назначены одному и тому же этапу, они выполняются параллельно на этом этапе.

Вот пример, который соответствует вашим требованиям.Обе задачи сборки выполняются одновременно, затем выполняется пакетная задача:

before_script:
  - echo "do some runner environment prep"

stages:
  - build
  - package

build_task1:
  stage: build
  script:
    - echo "do build1 stuff"

build_task2:
  stage: build
  script:
    - echo "do build2 stuff"

package_task:
  stage: package
  script:
    - echo "do package stuff"

И вот успешный конвейер с использованием указанного выше определения конвейера:

enter image description here

...