Projects NukeBird ci NukeBird/ci Overview
NukeBird/ci
0 forks
Общие CI-джобы: MR-превью на *.nukebird.ru
id: 11
256 Lines
  • Yaml 42.2%
  • Markdown 30.9%
  • Shell 27%
README.md

NukeBird/ci

Шаблон CI для OneDev, который даёт каждому PR превью: страницу https://<репо>-pr<N>.nukebird.ru со сборкой этого PR. Превью появляется при открытии PR, обновляется с каждым push в его ветку и удаляется при merge или discard.

Здесь лежат только общие джобы. Репо, которое их импортирует, дальше называется подключённым.

Как подключить репо

В подключённом репо нужны два файла:

  • Dockerfile — собирает приложение, контейнер слушает порт 80.

  • .onedev-buildspec.yml:

    version: 56
    imports:
    - projectPath: NukeBird/ci
      revision: main
    

Настройки

Задаются в properties файла .onedev-buildspec.yml подключённого репо:

properties:
- name: previewAuth
  value: 'true'
СвойствоПо умолчаниюЧто включает
previewAuthfalseвход по логину и паролю из секрета preview-htpasswd
deployMainfalseпостоянный деплой ветки main на https://<репо>.nukebird.ru
dataPathnoneпостоянные данные: каталог в контейнере, куда монтируется volume <деплой>-data

<репо> — имя репо в нижнем регистре, _ заменяется на -. <деплой> — <репо>-pr<N> для PR и <репо> для main. Volume PR удаляется вместе с превью, volume main — только вручную.

Джобы

  • preview — PR открыт или обновлён, а также push в main при deployMain=true: собирает образ, даёт старому контейнеру 30 секунд на остановку и запускает новый.
  • preview-teardown — PR смержен или отклонён: удаляет контейнер, образ и volume этого PR.

Как менять шаблон

Подключённые репо берут джобы из ветки main этого репо, поэтому push сюда сразу меняет поведение всех превью.

  1. Запусти tod build check-spec в корне репо. Он проверяет .onedev-buildspec.yml и переписывает его в том виде, в котором его хранит OneDev, без комментариев. Готово, когда он вывел Build spec checked successfully; переписанный файл коммить как есть.
  2. Запусти sh test-preview.sh .onedev-buildspec.yml <чекаут NukeBird/shooter> на машине, где работают превью: скрипту нужны docker, python3 с yaml и контейнеры traefik и nginx_proxy_manager-app-1. Он гоняет обе джобы на фейковом репо citest и проверяет сборку shooter (cool_project.wasm). Готово, когда каждая строка вывода начинается с ok, а код выхода — 0.
  3. Сделай push в main. Готово, когда сборка preview этого репо завершилась со статусом SUCCESSFUL. Здесь deployMain=false, так что она только подтверждает, что OneDev принял buildspec.

Правила OneDev в скриптах джоб

  • @имя@ — переменная OneDev. Литеральный @ пишется @@, например "$@@".
  • Каждый @secret:…@ подставляется при старте джобы, поэтому секрет должен существовать в подключённом репо или его родителе, даже если строка с ним не выполнится.
  • Выключенное свойство записывается как none: OneDev требует непустое значение.
  • PR-триггеры (PullRequestUpdateTrigger, PullRequestMergeTrigger, PullRequestDiscardTrigger) состоят из одной строки - type: ….
  • Пояснения к шаблону пиши в этот README: комментарии в buildspec пропадают на шаге 1.
Please wait...
Connection lost or session expired, reload to recover
Page is in error, reload to recover