Continuous Integration / Continuous Deployment
Если говорить проще, то при пуше в репозиторий автоматически запускается код / задачи, тесты.
Простенький pipeline из двух задач может выгледть так:
GitLab аккаунт и код)
VPS сервер, например такой
Данная статья не является точной инструкцией и предполагает наличие специфических знаний.
Чтобы задание смогло заходить на сервер без нас необходим ключ. Генерируем:
ssh-keygen -t rsa
Теперь нужно скопировать значение ключа, обычно это
cat ~/.ssh/id_rsa.pub
С ключом можно выключить парольную аутентификацию и не установливать fail2ban
Так же пригодится ip адрес машины, куда будет ходить задача.
Можно дать другие имена переменным (параметр key), настройки по умолчанию нам подойдут.
Теперь в корне проекта необходимо создать файл .gitlab-ci.yml (точка в начале необходима) примерно следующего содержания.
# использовать специальный образ в котором можно билдить другие докер образы
# https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
image: gitlab/dind
services:
- docker:dind
# Описываем какие у нас могут быть задачи
stages:
- build
- deploy
# Эта часть выполняется глобально для всего pipeline перед началом выполнения задач
# В ней мы добавляем наш ключ из установленной ранее переменной SSH_KEY в ssh agent
# для входа на сервер
before_script:
- 'which ssh-agent || ( apt-get install -qq openssh-client )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
# Описание задачи сборки
build:
stage: build
script:
# Я использую реестр образов GitLab, поэтому необходимо сначала залогинится
- docker login -u probka_deploy -p $PROBKA_DEPLOY_TOKEN registry.gitlab.com
# Собираю образ, описание сборки выходит за рамки данной статьи
- docker build -t registry.gitlab.com/blucknote/probkabot:latest .
# Заливаю свежий образ в реест
- docker push registry.gitlab.com/blucknote/probkabot:latest
# Указание веток, для которой нужно запускать задачу. В данном примере только одна
only:
- master
# Описание задачи разворачивания
deploy:
stage: deploy
script:
# из сервера (не из задачи!) логинимся в реестре образов
- ssh root@$HOST "docker login -u probka_deploy -p $PROBKA_DEPLOY_TOKEN registry.gitlab.com"
# на сервере останавлаются контейнеры с ботом и обработчиком, скачивается обновлённый образ и запускается снова
- ssh root@$HOST "cd /root/probkabot/ && docker-compose stop bot consumer_1 && docker-compose pull bot && docker-compose up -d bot consumer_1"
only:
- master
Теперь, когда вы запушите в мастер или вольёте другую ветку, то автоматически запустится pipeline, который соберёт проект и развернёт его на сервере, оставив вас без работы позволяя сосредоточится на коде, а не на развёртывании.
На бесплатном тарифе будет доступно 400 минут. Информации по ограничениям реестра контейнеров я не нашёл. Но эту информацию чтоит принять к сведению.
При запуске каждый раз создаёт чистое линукс окружение в докер контейнере. Добавляет в него всё, что указано и выполняет прописанные инструкции.
Лог успешной задачи может выглядеть так:
В данной статье хотелось бы затронуть мобильную тематику в популярной RouterOS, а именно подключение 3G/4G(LTE) модемов к роутерам компании MikroTik
Продолжить Чтение...Развернутая инструкция по настройке nginx, Gunicorn и SSL для вашего Django проекта в продакшене.
Продолжить Чтение...Кратчайшая минималистичная инструкция по сборке кластера на ESXI и немного про резервирование
Продолжить Чтение...