Простой CI/CD на Ansible Semaphore

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

CI/CD стал неотъемлемой частью процесса разработки ПО, как в крупных, так и в небольших компаниях и проектах, в том числе open source.

Самыми популярными CI/CD-системами является GitLab и Jenkins. Обе эти системы являются мощными, расширяемыми и включают множество дополнительных возможностей. С помощью этих систем можно построить CI/CD любой сложности.

Но часто бывает, особенно на небольших проектах, что необходимо максимально простое и прямолинейное решение, а не функциональность. В этом случае Ansible Semaphore является хорошей альтернативой GitHub и Jenkins.

Ansible Semaphore – это веб-интерфейс для запуска Ansible-сценариев с CI/CD возможностями. С помощью него можно превратить плейбук в простую CI/CD систему.

Интерфейс Ansible Semaphore напоминает интерфейс Jenkins и AWX. Описание интерфейса можно найти в документации.

Далее предполагается что читатель знаком с Ansible.

Так как предполагается небольшой проект, то возьмем модель разработки Trunk. В отличие от Git-flow такая модель предполагает одну и ту же ветвь для разработки и для продакшна. Это сильно упрощает CI/CD.

Наш pipeline будет выглядеть так:

Все элементы схемы легко реализуются на Ansible. А благодаря версионированию и вызову задач по расписанию, все это будет работать автоматически.

Создадим репозиторий на GitHub

Нам потребуется два плейбука и соответствующие роли для них:

  • build.yml – для сборки приложения и отправки его в S3-хранилище.

  • deploy.yml – для доставки приложения на сервера dev- и production-окружения.

Вот исходный код: github.com/fiftin/ansible-semaphore-deploy-test.

Интерфейс Ansible Semaphore

Для тех кто знаком с AWX, интерфейс будет понятен. Для остальных коротко расскажу. Интерфейс имеет следующие ключевые сущности:

  • Задача (Task) – Процесс выполнения Ansible-плейбука.

  • Шаблон задачи (Task Template) – шаблон, на основе которого создается задача.

  • Inventory – список серверов, для которых будет выполняться задача.

  • Environment – переменные окружения (extra vars в терминологии Ansible).

  • Ключ (Key) – SSH-ключ или логин/пароль, по которому Ansible будет подключаться к серверам.

  • Репозиторий (Repository) – git-репозиторий, где хранится код Ansible-плейбуков.

Создадим 3 Inventory (вот они):

  • Build – указывает, на каком сервере будет собираться приложение.

  • Dev – указывал, на какой сервер в dev-окружении приложение будет разворачиваться.

  • Production – указывал, на какой сервер в production-окружении приложение будет разворачиваться.

Создадим 3 окружения (вот они): Build, Dev, Production.

Создадим 3 шаблона задач (вот они):

  • Build – для сборки приложения и отправки его в S3-хранилище.

  • Deploy to Dev – для доставки приложения на сервера dev-окружения.

  • Deploy to Production – для доставки приложения на сервера production-окружения.

Запуск

Задача Build будет выполняться автоматически при появлении нового коммита в репозитории. Сборки будут грузиться в S3-хранилище.

После её успешного выполнения будет автоматически запущена задача Deploy to Dev, которая развернет приложение в Dev-окружении. Демонстрационный dev-сайт доступен по адресу demo-dev.ansible-semaphore.com.

Задачу Deploy to Production нужно будет запускать вручную. Она будет доставлять приложение в Production-окружение, только если оно было успешно развернуто и проверено в Dev-окружении. Демо здесь: demo-prod.ansible-semaphore.com.

Если захотите установить у себя:

  • Docker: https://hub.docker.com/r/semaphoreui/semaphore.

  • Snap: https://snapcraft.io/semaphore.

Поиграться с описанным выше примером можно на сайте demo.ansible-semaphore.com.

Источник: https://habr.com/ru/post/645927/


Интересные статьи

Интересные статьи

Статья направлена на решение проблемы "зависания" выгрузки результатов опросов при использовании модуля Vote 1С-Битрикс в случае, если в опросе много вопросов или ответов. Так-же в статье реализована ...
Сеть магазинов модной одежды lady & gentleman CITY перенесла свою инфраструктуру в облако. Ярослав Нечепоренко, руководитель веб-отдела, рассказывает, какие сервисы использует ритейлер и как они о...
Давайте, я сразу объясню свою баянистость. Да, в интернетах полно мануалов. Да, полно пошаговых прохождений. Да, можете сказать, что все жевано пережевано. Но конкретно в моем случае, как...
Введение На сегодняшний день защита информации является одной из приоритетных задач IT-индустрии, особенно учитывая то, что для прослушивания трафика в наше время практически не нужно иметь спец...
Как широко известно, с 1 января 2017 года наступает три важных события в жизни интернет-магазинов.