Для реализации функций хука dcape подготавливается контейнер, который содержит:
- adnanh/webhook
- скрипт
hook_dcape.sh
- файлы управления хуком
local.json
иremote.json
Этот контейнер обеспечивает выполнение функций:
- деплой приложений (сервисов) выполнением
make start-hook
- формирование конфига по умолчанию и сохранение его в KV-хранилище, создание каталога для деплоя, далее - холодное обновление
- удаление деплоя приложения (сервиса) выполнением
make stop
- обновление существующего деплоя при модификации в репозитории (push), далее - горячее обновление
- make - для выполнения целей Makefile (если этот файл необходим для деплоя)
- enfist - KV-хранилище конфигураций проектов
В настройках репозитория приложения (далее org/project) создать хук (тип: gitea) и указать в качестве адреса:
-
https://cis.your_domain.net/hooks/remote?branch=default, если webhook сервер находится на удаленном хосте
your_domain.net
-
http://webhook:9000/hooks/local?branch=default, если webhook установлен на этом же хосте под управлением dcape (обмен с gitea будет происходить по внутренней сети dcape)
В настройках созданного хука указать события для запуска хука: Create
и Push
.
Хук выполняется при возникновении событий:
- изменения репозитория (push) - автоматический деплой нужной ветки
- нажатия кнопки "Проверить доставку" (Test delivery) в настройках хука git репозитория - ручной деплой нужной ветки
Управление работой webhook производится через конфигурацию в строке адреса хука (TargetURL)
системы git. В общем виде строка содержит адрес хука, имя файла управления и параметр конфигурации.
Контейнер webhook использует порт 9000, при использовании с dcape на одном хосте, адрес:
http://webhook:9000/hooks
, при использовании с другого хоста, адрес публикуется на cis сервисе dcape:
http://cis.your_domain.net/hooks
Имя файла управления может быть local
или remote
и зависит от расположения dcape, на который выполняется деплой:
- деплой на dcape, который на одном хосте с git (и webhook)
http://webhook:9000/hooks/local?branch=
- деплой на dcape с другого хоста:
http:/cis.your_domain.net/hooks/remote?branch=
После знака '=' устанавливается параметр конфигурации хука (config URL), с помощью которого можно управлять работой хука.
- 'all' - отправка изменений (push), выполняется деплой любой ветки; при нажатии "Проверить доставку" хук выполняться не будет
- 'default' - отправка изменений (push), будет выполнен деплой, только если push выполнен для ветки по умолчанию; при нажатии "Проверить доставку" будет выполнен деплой ветки по умолчанию
- 'NAME' - при отправке изменении (push), будет выполнен деплой, только если push выполнен для ветки 'NAME'; при нажатии "Проверить доставку" будет выполнен деплой ветки 'NAME'
- 'default-rm' - при отправке изменении (push), деплой (удаление деплоя) не выполняется; при нажатии "Проверить доставку" будет выполнено удаление деплоя ветки по умолчанию
- 'NAME-rm' - при отправке изменении (push), деплой (удаление деплоя) не выполняется; при нажатии "Проверить доставку" будет выполнено удаление деплоя ветки 'NAME'
- В случае необходимости удаления нескольких деплоев, при установленном параметре 'default-rm', нажимая кнопку "Проверить доставку" и меняя ветку по умолчанию в настройках git можно удалить необходимые деплои.
- Если необходимо выполнить деплой не всех веток в репозитории, то при установленном параметре 'default' автоматический деплой (по событию push) будет выполняться только для ветки по умолчанию, при необходимости переключать ветку по умолчанию в настройках git и деплой будет выполняться для этой (следующей) ветки.
- холодное - удалить каталог деплоя,
git clone
,make $_CI_MAKE_START
- горячее - в каталоге деплоя
git pull
,make $_CI_MAKE_UPDATE
Описание переменных: $branch - имя ветки, которая модифицируется при отправке изменений (push)
- Выбрать имя ветки в зависимости от параметра config URL
- Если config URL = 'default-rm' или 'NAME-rm' и была нажата кнопка Test delivery, выполнить Удаление деплоя и завершить работу
- Определить каталог деплоя $dest (org--progect--branch)
- Выгрузить из KV-store файл .env по ключу $dest
- Если файл есть и в нем
_CI_HOOK_ENABLED=no
- завершить работу - Создать каталог деплоя $dest, если его нет
- Если
_CI_HOOK_UPDATE_HOT=yes
- выполнить Горячее обновление и завершить работу - Выполнить Холодное обновление
- Завершить работу
- Удалить у $branch суффикс
-rm
- Определить каталог деплоя $dest (org--progect--branch)
- Если $dest не существует - завершить работу
- Выполнить в $dest
make $_CI_MAKE_STOP
(если есть Makefile) - Удалить $dest
- Завершить работу
- Подготовить .env
- Выполнить
git pull
- Выполнить
make $_CI_MAKE_UPDATE
- Если есть $dest
- Если есть Makefile - выполнить
make $_CI_MAKE_STOP
- Удалить $dest
- Создать $dest
- Выполнить
git clone
- Подготовить .env
- Если в KV не было файла .env
- Завершить работу
- Если есть Makefile - выполнить
make $_CI_MAKE_START
- Если в KV есть данные по ключу org--progect--branch - сохранить их в .env
- Если нет данных
- Выполнить
make .env
- Добавить в .env переменные
_CI_*
- Загрузить файл .env в KV
- Выполнить
. .env