• [ GEEKHERO:2021 ]
  • Категории
  • Files 42

Воистину гений

СТАТЬЯ ИЛИ СОН?
Настройка CI/CD на примере gitlab | GEEKHERO
eVgen 7 июня 2021 г. 17:55 | обновлен 11 июня 2021 г. 11:27

Настройка CI/CD на примере gitlab

Иконка категории
В категории "Обучение и подготовка"

Метки: DevOps, gitlab, CI/CD


Создать мем: шаблон мема да кто этот ваш, да кто такой этот ваш мем шаблон,  Телевизор | Мемы, Шаблоны, Телевизор
Да кто такой этот ваш CI/CD??

Continuous Integration / Continuous Deployment

 

А проще?

Если говорить проще, то при пуше в репозиторий автоматически запускается код / задачи, тесты.

Простенький pipeline из двух задач может выгледть так:

 

Нам понадобится

GitLab аккаунт и код)

VPS сервер, например такой

 

ВНИМАНИЕ

Данная статья не является точной инструкцией и предполагает наличие специфических знаний.

 

Чтобы задание смогло заходить на сервер без нас необходим ключ. Генерируем:

ssh-keygen -t rsa

Теперь нужно скопировать значение ключа, обычно это

cat ~/.ssh/id_rsa.pub

С ключом можно выключить парольную аутентификацию и не установливать fail2ban

Так же пригодится ip адрес машины, куда будет ходить задача.

 

Создадим переменные для pipline. Для этого нужно войти в проект, настройки, CI/CD

Можно дать другие имена переменным (параметр 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 минут. Информации по ограничениям реестра контейнеров я не нашёл. Но эту информацию чтоит принять к сведению.

 

Что такое задача?

При запуске каждый раз создаёт чистое линукс окружение в докер контейнере. Добавляет в него всё, что указано и выполняет прописанные инструкции.

Лог успешной задачи может выглядеть так:

Поделиться записью


Похожие записи:

Card image cap
MikroTik 3G 4G LTE: Мобильный роутер – из LTE в PPP

В данной статье хотелось бы затронуть мобильную тематику в популярной RouterOS, а именно подключение 3G/4G(LTE) модемов к роутерам компании MikroTik

Продолжить Чтение...
Card image cap
Запуск Django сайта на nginx + Gunicorn + SSL

Развернутая инструкция по настройке nginx, Gunicorn и SSL для вашего Django проекта в продакшене.

Продолжить Чтение...
Card image cap
Собираем кластер на ESXI

Кратчайшая минималистичная инструкция по сборке кластера на ESXI и немного про резервирование

Продолжить Чтение...
Категории
Обучение и подготовка (3)
Linux (15)
Телекоммуникации (12)
Программирование (3)
Обзоры на технику (1)
Виртуализация (1)
Web-разработка (5)
Администрирование Windows (0)

Последние записи
Пишем бота, присылающего уведомления от Mattermost в Telegram
24 Мар 2023
Быстро подключаемся к серверам по SSH из терминала
28 Фев 2023
Flask в Docker+Kuberenetes
28 Авг 2022

Популярные метки
Copyright 2019-2021  
Обратная связь