- Yaml 42.2%
- Markdown 30.9%
- Shell 27%
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'
| Свойство | По умолчанию | Что включает |
|---|---|---|
previewAuth | false | вход по логину и паролю из секрета preview-htpasswd |
deployMain | false | постоянный деплой ветки main на https://<репо>.nukebird.ru |
dataPath | none | постоянные данные: каталог в контейнере, куда монтируется volume <деплой>-data |
<репо> — имя репо в нижнем регистре, _ заменяется на -.
<деплой> — <репо>-pr<N> для PR и <репо> для main.
Volume PR удаляется вместе с превью, volume main — только вручную.
Джобы
preview— PR открыт или обновлён, а также push вmainприdeployMain=true: собирает образ, даёт старому контейнеру 30 секунд на остановку и запускает новый.preview-teardown— PR смержен или отклонён: удаляет контейнер, образ и volume этого PR.
Как менять шаблон
Подключённые репо берут джобы из ветки main этого репо, поэтому push сюда
сразу меняет поведение всех превью.
- Запусти
tod build check-specв корне репо. Он проверяет.onedev-buildspec.ymlи переписывает его в том виде, в котором его хранит OneDev, без комментариев. Готово, когда он вывелBuild spec checked successfully; переписанный файл коммить как есть. - Запусти
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. - Сделай push в
main. Готово, когда сборкаpreviewэтого репо завершилась со статусом SUCCESSFUL. ЗдесьdeployMain=false, так что она только подтверждает, что OneDev принял buildspec.
Правила OneDev в скриптах джоб
@имя@— переменная OneDev. Литеральный@пишется@@, например"$@@".- Каждый
@secret:…@подставляется при старте джобы, поэтому секрет должен существовать в подключённом репо или его родителе, даже если строка с ним не выполнится. - Выключенное свойство записывается как
none: OneDev требует непустое значение. - PR-триггеры (
PullRequestUpdateTrigger,PullRequestMergeTrigger,PullRequestDiscardTrigger) состоят из одной строки- type: …. - Пояснения к шаблону пиши в этот README: комментарии в buildspec пропадают на шаге 1.