Конвейер Gitlab CI для параллельного выполнения заданий на том же этапе и вызова / запуска других заданий на том же этапе

#amazon-web-services #gitlab #gitlab-ci #build-automation #gitlab-ci-runner

#amazon-web-services #gitlab #gitlab-ci #автоматизация сборки #gitlab-ci-runner

Вопрос:

Я пытаюсь создать конвейер автоматизации для загрузки данных. У меня есть сценарий, описанный ниже:

 stages
 - stage1
- stage2

job1:
  stage: stage1
  script:
  - echo "stage 1 job 1"


job2:
  stage: stage1
  script:
   - echo "stage 1 job 2"

job3:
  stage: stage1
  script:
   - echo "stage 1 job 3"

job4:
  stage: stage1
  script:
   - echo "stage 1 job 4"
  

Я хочу запустить job1 и job2 параллельно на одном этапе. Итак, после успешного выполнения заданий 1 и 2

  • job1 вызовет / запустит job3. это означает, что job3 запустится автоматически при успешном выполнении job1
  • job2 вызовет / запустит job4, что означает, что job4 запустится автоматически при успешном выполнении job2

Я пишу конвейер в .gitlab-ci.yml.

Кто-нибудь может помочь мне реализовать это?

Ответ №1:

Строгая реализация ваших требований невозможна (насколько мне известно), задания 3 и 4 должны быть на отдельном этапе (хотя планируется поддержка их размещения на одном этапе). Для ясности: другие функциональные требования могут быть выполнены, т.е.:

  • job1 и job2 запускаются параллельно
  • job1 запустит job3 (немедленно, не дожидаясь завершения job2)
  • job2 запустит job4 (немедленно, не дожидаясь завершения job1)

Ключ использует ключевое слово needs для преобразования конвейера в ориентированный ациклический граф:

 stages:
    - stage-1
    - stage-2

job-1:
    stage: stage-1
    needs: []
    script: 
      - echo "job-1 started"
      - sleep 5
      - echo "job-1 done"

job-2:
    stage: stage-1
    needs: []
    script: 
      - echo "job-2 started"
      - sleep 60
      - echo "job-2 done"

job-3:
    stage: stage-2
    needs: [job-1]
    script: 
      - echo "job-3 started"
      - sleep 5
      - echo "job-3 done"

job-4:
    stage: stage-2
    needs: [job-2]
    script: 
      - echo "job-4 started"
      - sleep 5
      - echo "job-4 done"
  

конвейер

Как вы можете видеть на скриншоте, задание 3 запущено, хотя задание 2 все еще выполняется.

Комментарии:

1. Привет @mafor спасибо за ваш ответ. И это сработало для меня в первый раз. Но позже, когда я пытаюсь это реализовать, он выдает мне сообщение об ошибке «найдена ошибка в вашем .gitlab-ci.yml: job-3: требуется ‘job-1’ «. Я также проверил через CI lint, что синтаксической ошибки нет. Я не знаю, почему возникает эта ошибка.

2. @VIPINPAL это может быть связано со спецификой вашей работы, например, с использованием only ключевого слова. Видишь gitlab.com/gitlab-org/gitlab/-/issues/207225