Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

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