Skip to content

Latest commit

 

History

History
120 lines (89 loc) · 8.98 KB

README.md

File metadata and controls

120 lines (89 loc) · 8.98 KB

Continuous delivery hook script

Общее описание хука dcape

Для реализации функций хука dcape подготавливается контейнер, который содержит:

  • adnanh/webhook
  • скрипт hook_dcape.sh
  • файлы управления хуком local.json и remote.json

Этот контейнер обеспечивает выполнение функций:

  • деплой приложений (сервисов) выполнением make start-hook
  • формирование конфига по умолчанию и сохранение его в KV-хранилище, создание каталога для деплоя, далее - холодное обновление
  • удаление деплоя приложения (сервиса) выполнением make stop
  • обновление существующего деплоя при модификации в репозитории (push), далее - горячее обновление

Зависимости

  • make - для выполнения целей Makefile (если этот файл необходим для деплоя)
  • enfist - KV-хранилище конфигураций проектов

Настройка и описание работы хука dcape

Настройка хука.

В настройках репозитория приложения (далее 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'

Некоторые шаблоны действий

  1. В случае необходимости удаления нескольких деплоев, при установленном параметре 'default-rm', нажимая кнопку "Проверить доставку" и меняя ветку по умолчанию в настройках git можно удалить необходимые деплои.
  2. Если необходимо выполнить деплой не всех веток в репозитории, то при установленном параметре 'default' автоматический деплой (по событию push) будет выполняться только для ветки по умолчанию, при необходимости переключать ветку по умолчанию в настройках git и деплой будет выполняться для этой (следующей) ветки.

Холодное и горячее обновление

  • холодное - удалить каталог деплоя, git clone, make $_CI_MAKE_START
  • горячее - в каталоге деплоя git pull, make $_CI_MAKE_UPDATE

Алгоритм работы

Описание переменных: $branch - имя ветки, которая модифицируется при отправке изменений (push)

  1. Выбрать имя ветки в зависимости от параметра config URL
  2. Если config URL = 'default-rm' или 'NAME-rm' и была нажата кнопка Test delivery, выполнить Удаление деплоя и завершить работу
  3. Определить каталог деплоя $dest (org--progect--branch)
  4. Выгрузить из KV-store файл .env по ключу $dest
  5. Если файл есть и в нем _CI_HOOK_ENABLED=no - завершить работу
  6. Создать каталог деплоя $dest, если его нет
  7. Если _CI_HOOK_UPDATE_HOT=yes - выполнить Горячее обновление и завершить работу
  8. Выполнить Холодное обновление
  9. Завершить работу

Удаление деплоя

  1. Удалить у $branch суффикс -rm
  2. Определить каталог деплоя $dest (org--progect--branch)
  3. Если $dest не существует - завершить работу
  4. Выполнить в $dest make $_CI_MAKE_STOP (если есть Makefile)
  5. Удалить $dest
  6. Завершить работу

Горячее обновление

  1. Подготовить .env
  2. Выполнить git pull
  3. Выполнить make $_CI_MAKE_UPDATE

Холодное обновление

  1. Если есть $dest
  • Если есть Makefile - выполнить make $_CI_MAKE_STOP
  • Удалить $dest
  1. Создать $dest
  2. Выполнить git clone
  3. Подготовить .env
  4. Если в KV не было файла .env
  • Завершить работу
  1. Если есть Makefile - выполнить make $_CI_MAKE_START

Подготовка .env

  1. Если в KV есть данные по ключу org--progect--branch - сохранить их в .env
  2. Если нет данных
  • Выполнить make .env
  • Добавить в .env переменные _CI_*
  • Загрузить файл .env в KV
  1. Выполнить . .env