Инсрукция по использованию скрипта развертывания
$ mk-helpers/preseed.sh
Usage:
--provision - provision VM and deploy gitlab on it
--seed - seed projects from backup
--create_images - create base docker images for ci builds and push them to registry
--runner - reconfigure gitlab ci runner
--full - fulfill all presented actions
-p - along with --provision used to up parallels env
-v - along with --provision used to up virtualbox env
Скачать сам репозиторий
$ git clone https://github.com:chromko/docker-mk-5-new.git
$ cd docker-mk-5-new
В файле data/creds.env выставить значения переменных
NAME=your_name
Запустить процесс развертывания в AWS и ждать завершения
mk-helpers/preseed.sh --full ... Адрес вашего сервера: <Адрес вашей docker machine> Gitlab login: root Gitlab password: dockermk
Для развертывания в parallels или virtualbox указать флаг '-p' или '-v' соответственно
mk-helpers/preseed.sh --full -p
Для подключения к docker-engine на созданной ВМ запустить:
source mk-helpers/env.vars docker ps ....
Клонировать репозитории для мк (будут содержаться в папке module5_app):
sh mk-helpers/clone-repos.sh
- Автоматическое развертывание стенда mk-helpers/preseed.sh:
- --provision
- Поднятие виртуальной машины (aws,parallels,virtualbox)
- Подготовка dockerd и /etc/hosts для использования insecure local registry
- --seed
- Восстановление базы проектов из бекапа
- Внесение secure variables в каждый проект (DEV_HOST и BUILD_TOKEN)
- --create_images
- Клонирование репозиториев для базовых образов docker (dind, git-compose)
- Сборка образов и push в local registry
- --runner
- (пере)создание toml файла для gitla-ci-runner и перезапуск контейнера
- --full
- все вместе
- Запуск gitlab-ci pipeline
- Подготовка
- В gitlab-ci-runner через volume пробрасывается sock
- Для ускорения и упрощения коммуникации каждый сборочный контейнер присоединяется к сети dockermk5_default (в ней нахоядтся сам runner и gitlab с его gitlab-registry.local)
- Gitlab-ci-runner запускает контейнер из образа docker:dind
- Gitlab-ci-runner запускает runner контейнер
- В переменной окружения DOCKER_HOST (.gitlab-ci.yml файл) ссылаемся на docker-engine внутри контенера с docker:dind
- Используется переменная DOCKER_DRIVER со значением используемого storage driver для сборки образов (vfs по-умолчанию медленный)
- Ход работы
- Внутри runner контенера происходит процесс одного job'а
- Job' ы в одинаковом stage проекта выполняются параллельно (и в разных проектах, если позволяет concurrent значение runner'а)
- После окончания job'ы контейнер выключается, а вся информация по сборке пропадает (кроме /cached и /artifacts (если есть).
- Во время сборок проектов используется несколько директив docker
- --cache-from - позволяет использовать скаченный(pull) образ и как источник сборочного кэша
- --pull - заставляет docker постоянно проверять актуальную версию базового образа (FROM image:tag )
- В случае необходимости сохранить собранный артифакт в виде docker образа – происходит push в local registry
- Chaining
- После release стадии запускается стадия notify, которая , используя BUILD_TOKEN (постоянный, выданный пользователю root) и id проекта, создает новый pipeline этого проекта
- Deploy
- На стадии deploy запускается docker-compose, который разворачивает на DEV_HOST машине контейнеры с проектом блога.
- Во вкладке pipelines->environments проекта(blog_ui) появляется запись о созданном окружении(dev) и ссылка на сайт проекта. У остальных(blog_backend, mongodb) deployment проектов ссылки нет (окружение есть).
- Gitlab имеет встроенный Prometheus, а также ряд экспортеров:
- Node exporter
- Gitalb-monitor(Database, Sidekiq, Process); В версии 1.3 экспортера завезли статистику билдов (пока не в релизе гитлаба)
- Redis
- Postgres
- Prometheus
- Kubernetes
- Gitlab-ci-runner exporter (запускается с помощью директивы monitor_server в toml)
- Gilab pages
- Gitlab EE имеет deploy-board
- Gitlab может выводить dashboards для мониторинга kubernetes приложений