CI/CD стал неотъемлемой частью процесса разработки ПО, как в крупных, так и в небольших компаниях и проектах, в том числе open source.  Самыми популярными CI/CD-системами является GitLab и Jenkins. Обе эти системы являются мощными, расширяемыми и включают множество дополнительных возможностей. С помощью этих систем можно построить CI/CD любой сложности. Но часто бывает, особенно на небольших проектах, что необходимо максимально простое и прямолинейное решение, а не функциональность. В этом случае Ansible Semaphore является хорошей альтернативой GitHub и Jenkins. Ansible Semaphore – это веб-интерфейс для запуска Ansible-сценариев с зачатками CI/CD. С помощью него можно превратить плейбук в простую CI/CD систему. Это open source проект, он развивается с 2015 года и на данный момент у него 5200 звезд на GitHub. Интерфейс Ansible Semaphore напоминает интерфейс Jenkins и AWX. Описание интерфейса можно найти в документации.  Далее предполагается что читатель знаком с Ansible. Так как предполагается небольшой проект, то возьмем модель разработки Trunk. В отличие от Git-flow такая модель предполагает одну и ту же ветвь для разработки и для продакшна. Это сильно упрощает CI/CD. Наш pipeline будет выглядеть так: Все элементы схемы легко реализуются на Ansible. А благодаря версионированию и вызову задач по расписанию, все это будет работать автоматически. Нам потребуется два плейбука и соответствующие роли для них: build.yml – для сборки приложения и отправки его в S3-хранилище. deploy.yml – для доставки приложения на сервера dev- и production-окружения. Вот исходный код: github.com/fiftin/ansible-semaphore-deploy-test. Для тех кто знаком с 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-окружения. Разворачивать будем вот это нехитрое веб-приложение: https://github.com/fiftin/ansible-semaphore-test-app :) Задача Build  выполняется автоматически при появлении нового коммита в репозитории. Успешные сборки загружаются в S3-хранилище. После каждой успешной сборки автоматически запускается задача Deploy to Dev, которая разворачивает приложение в Dev-окружении. Демонстрационный dev-сайт доступен по адресу demo-dev.ansible-semaphore.com. Задачу Deploy to Production нужно запускать вручную. Она доставляет приложение в Production-окружение, только если оно было успешно развернуто в Dev-окружении. Если захотите установить у себя: Docker: https://hub.docker.com/r/semaphoreui/semaphore. Snap: https://snapcraft.io/semaphore. Поиграться с описанным выше примером можно на сайте demo.ansible-semaphore.com.  Full stack developer