Введение
Dcape предназначен для построения gitops (CI/CD) решений, в которых на каждом сервере установлен dcape и на одном - web-сервис git (например: gitea), который по факту изменений в репозитории активирует drone на присоединенных серверах.
После развёртывания сервисов git/drone, задача dcape уже решена, но возникает возможность добавить в деплой:
- Makefile.app для использования в директиве
include
файлаMakefile
адаптируемого приложения (чтобы не дублировать цели) - docker-compose.app.yml для использования в качестве основы для override в адаптируемом приложении
Эти файлы добавляются в образ dcape-compose
, поэтому доступны и на хостовой системе и при развёртывании. Для работы с ними в Makefile
приложения надо добавить директивы:
|
|
Это позволяет
- не дублировать в make такие цели, как
dc
,db-create
,.drone-default
- директивой
USE_DB=yes
добавлять в .env настройки БД и активировать командыdb-*
- директивой
ADD_USER=yes
добавлять в .env настройки учетной записи пользователя - использовать docker-compose.app.yml в цели
dc
как основу для перезаписи.
См. также: Пример использования
Алгоритм настройки
Первое развёртывание приложения в среде dcape состоит из следующих шагов:
- создать репозиторий (или зеркало) в gitea
- активировать репозиторий в drone целевого сервера
- выполнить
git push
(или тест вебхука) - drone произведет попытку развёртывания, в результате которой будет создан файл .env и сохранен в enfist с ключомorg--repo_name--branch.sample
- отредактировать конфигурацию и сохранить ее под именем без суффикса
.sample
- повторить деплой в drone или тест вебхука - приложение будет развернуто на целевом сервере
После этого push в репозиторий проекта будет приводить к разворачиванию/обновлению приложения в среде dcape.
Для развертывания приложения в среде dcape, оно должно поддерживать интеграцию с тремя подсистемами:
Ниже описаны примеры такий интеграции
Интеграция с traefik
Производится с помощью меток контейнера.
Пример docker-compose.yml
Интеграция с woodpecker
Производится с помощью файла .woodpecker.yml
, который размещается в корне репозитория.
Пример .drone.yml
|
|
Пояснения по строкам
- 10: использовать для развертывания образ
dcape-compose
(создается при установке dcape) - 12: интеграция с enfist
- 13: подготовка окружения и запуск docker-compose
Подготовка окружения
создание персистентного каталога
Интеграция с enfist
enfist - это сервис хранения файлов конфигурации, которые в dcape имеют имя .env
. Соответственно, приложение должно уметь работать с конфигурацией, размещенной в таком файле. В части переменных, используемых в docker-compose.yml
, формат файла должен соответствовать docker-compose env_file.
Файл .env
c переменными для docker-compose.yml
и другими переменными для запуска приложения не размещается в репозитории, работа с ним при деплое осуществляется командой setup config:
- если в enfist нет конфигурации для текущей комбинации “организация-репозиторий-ветка”, выполняется
make .env.sample
(если в репозитории нет .env.sample) и полученный файл сохраняется в enfist с именем “организация-репозиторий-ветка.sample” - иначе - конфигурация из enfist выгружается в файл .env
Для каждой ветки репозитория создается своя конфигурация запуска.
Обновление и удаление развернутого приложения
В случае, если префикс (DCAPE_TAG
) и имя (APP_TAG
) приложения не изменились - контейнер будет остановлен и удален обновлении приложения. В остальных случаях управление контейнерами и образами может прибыть произведено через portainer