Как провалить конвейер Gitlab, который вызывает другой конвейер через API? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть 2 репозитория Gitlab:

  1. Проект A
  2. Интеграционные тесты для Проекта A

Я хочу остановить конвейер / сборку ПроектаA, если интеграционные тесты не пройдены, но в настоящее время конвейер проекта A проходит, даже если интеграционные тесты не пройдены.

My .gitlab-ci.yml для проекта A определяет эти 7 этапов:

stages:
  - build
  - test
  - publish
  - dev-deployment
  - staging-deployment
  - trigger-integration-tests
  - prod-deployment

Второй последнийstage (trigger-integration-tests) запускает проект интеграционных тестов с помощью вызова API Gitlab с curl:

trigger-integration-tests:
  stage: trigger-integration-tests
  image: ubuntu:16.04
  script:
  - apt-get update && apt-get install -y curl
  - "curl -X POST -F token=$INTEGRATION_TESTS_TOKEN -F variables[PROJECT_ID]=$CI_PROJECT_ID -F variables[BRANCH_NAME]=$CI_COMMIT_REF_NAME -F ref=master https://gitlab.mycompany.com/api/v4/projects/123/trigger/pipeline"
  allow_failure: false
  only:
  - master

Я попытался добавить флаг allow_failure: false, но это не помоглоне могу помочь, поэтому я ищу больше идей.

Я нашел технику триггера и ожидания , но не был уверен, что есть более простое решение.

1 Ответ

0 голосов
/ 27 ноября 2018

Как ответили на предыдущий вопрос , вы можете сделать следующее:

Из основного проекта, используя скрипт Python / Bash:

  1. Триггерконвейер тестов интеграции (и захват идентификатора конвейера)
  2. Опрос статуса конвейера с использованием захваченного идентификатора (который может быть running, pending, failed,canceled или skipped)
  3. Вызовите исключение / ошибку, если она не удалась ...

См. здесь для примера сценария Python для достиженияэто.

...