пятница, 23 марта 2018 г.

02 - Запуск билда другого проекта

Задача такая:
Разрабы пушат в свой репозиторий. В результате пуша делается диплой на тестовый стенд.
Да, знаю, в идеале нужно собрать контейнер и натравить свои тесты на него, а я пока так не умею, я заливаю по ssh на стенд и хочу вызвать процесс тестирования (вызвать pipeline тестирующего репозитория).
Для такого извращения есть механизм webhooks.
В тестирующем репо создаю триггер: Settings->CI / CD -> Pipeline Triggers

Называю этот триггер как-то и тычу "создать". Триггер создан. Ему присвоили ТОКЕН, который я должен вписать в url, чтобы "дёрнуть" его снаружи.
На странице прилагаются примеры скриптов, "как можно дёрнуть триггер".
Вариант 1
Первое, что я попробовал - это webhook со стороны репозитория разрабов.
  • В репозитории разрабов Settings->Integrations
  • Вписал на push ивент url, который мне сгенерировал gitlab.
  • Запустил разрабовский pipeline (диплой проекта на сервер)

Заработало!
Из минусов: не учел, что вебхук срабатывает сразу же после пуша, ещё до того, как разрабовский проект задиплоился на сервер.
Нужно как-то дождаться окончания диплоя и только потом "дёргать триггер"
Удалил вебхук.
Вариант 2
На странице с тестовым репо зашёл опять в  Settings->CI / CD -> Pipeline Triggers и скопировал
кусок скрипта
trigger_build:
  stage: deploy
  script:
    - "curl -X POST -F token=TOKEN -F ref=REF_NAME https://gitlab.com/api/v4/projects/NNNNNN/trigger/pipeline"
который вставил в .gitlab-ci.yml разрабовского репозитория. Ну, поменял stage, естественно.
Не заработало.
В контейнере, который я использовал для диплоя (image: ubuntu) не оказалось curl.
Рецепты гуглятся за 5 сек

  • Использовать контейнер с предустановленным curl (ну, нафиг, они все частные, я окую)
  • Сделать ap-tget update; apt-get install curl

Пока искал, нашёл, что image с бубунтой весит 186Мб (и они не включили в него curl!), а есть alpine linux, который весит 5Мб!!!
Нафиг убунту, вписал image: alpine
Переделал apt-get на apk
script:
    - apk --no-cache add curl
    - curl -X POST -F token="$TEST_TOKEN" -F ref=master https://gitlab.com/api/v4/projects/NNNNNN/trigger/pipeline
Заработало!
Из минусов: разрабовский диплой отрабатывает, "дёргает триггер" и зеленеет. А потом запускаются тесты. Некрасиво :(

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

Отправить комментарий