Запуск конвейера и ожидание его завершения из другого конвейера

У меня есть два разных репозитория проектов: мой репозиторий приложений и репозиторий API. Мое приложение взаимодействует с API.

Я хочу настроить некоторые интеграционные и E2E-тесты своего приложения. При выполнении этих тестов приложению потребуется использовать последнюю версию проекта API.

Проект API уже настроен для развертывания при запуске

deploy_integration_tests:
  stage: deploy
  script:
  - echo "deploying..."
  environment:
    name: integration_testing
  only:
    - triggers

В моем приложении есть задание на интеграционное тестирование, настроенное следующим образом:

integration_test
  stage: integration_test
  script:
    - echo "Building and deploying API..."
    - curl.exe -X POST -F token=<token> -F ref=develop <url_for_api_trigger>
    - echo "Now running the integration test that depends on the API deployment..."

Проблема, с которой я столкнулся, заключается в том, что триггер ставит в очередь только конвейер API (оба проекта используют один и тот же бегун) и продолжает работу до того, как конвейер API действительно запустится.

Есть ли способ дождаться запуска конвейера API, прежде чем пытаться запустить интеграционный тест?

Я могу сделать что-то вроде этого:

integration_test_dependency
  stage: integration_test_dependency
  script:
    - echo "Building and deploying API..."
    - curl.exe -X POST -F token=<token> -F ref=develop <url_for_api_trigger>

integration_test
  stage: integration_test
  script:
    - echo "Now running the integration test that depends on the API deployment..."

Но это по-прежнему не гарантирует, что конвейер API запускается и завершается перед переходом к этапу integration_test.

Есть ли способ сделать это?


person dseiple    schedule 02.06.2017    source источник
comment
Нет новостей по этому поводу и возможно ли это?   -  person diegosasw    schedule 10.05.2019


Ответы (4)


В настоящее время это невозможно. В gitlab есть некоторые проблемы по этому поводу:

Лучше всего придать вес некоторым из этих проблем.

person Matthew    schedule 05.06.2017
comment
Этот ответ уже устарел. В Gitlab уже есть docs.gitlab.com/ee/ci/pipelines/multi_project_pipelines.html как решение этой проблемы. - person Altus; 27.07.2021

Недавно я столкнулся с этим ограничением и создал образ, который можно повторно использовать, чтобы упростить этот этап сборки:

https://gitlab.com/finestructure/pipeline-trigger

Итак, в вашем случае это будет выглядеть так, используя мое изображение:

integration_test
  stage: integration_test
  image: registry.gitlab.com/finestructure/pipeline-trigger
  script:
    - echo "Now running the integration test that depends on the API deployment..."
    - trigger -a <api token> -p <token> <project id>

Просто используйте идентификатор проекта (вместо того, чтобы искать весь URL-адрес) и создайте личный токен доступа, который вы укажете здесь (лучше всего сделать это через секрет).

Причина, по которой последний необходим, заключается в опросе статуса конвейера. Вы можете запускать без него, но для получения результата требуется авторизация API.

См. Описание проекта для получения более подробной информации и дополнительных возможностей pipeline-trigger.

person sas    schedule 25.11.2017
comment
сэр, скажите, пожалуйста, когда мы используем этот модуль, можем ли мы запускать конвейер с некоторыми переменными? - person kiros123321; 03.03.2021
comment
Да, через trigger ... -e foo=bar. Подробности смотрите в README. - person sas; 03.03.2021

Мне не хватало точно такой же функции, поэтому я написал для этого утилиту python3.

См. Python Commander на GitHub.

person Christopher Friedt    schedule 27.09.2017

В случае, если кто-то еще здесь ищет это на запущенных конвейерах из ci yaml, вы можете использовать ключевое слово depend для strategy, чтобы конвейер ждал запущенного конвейера:

    trigger: 
      project: group/triggered-repo
      strategy: depend
person enderland    schedule 30.06.2021