# Ansible Semaphore

<https://habr.com/ru/articles/645927/>

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

Самыми популярными CI/CD-системами является [GitLab](https://habr.com/company/gitlab) и Jenkins. Обе эти системы являются мощными, расширяемыми и включают множество дополнительных возможностей. С помощью этих систем можно построить CI/CD любой сложности.

Но часто бывает, особенно на небольших проектах, что необходимо максимально простое и прямолинейное решение, а не функциональность. В этом случае [Ansible Semaphore](https://ansible-semaphore.com/) является хорошей альтернативой GitHub и Jenkins.

Ansible Semaphore – это веб-интерфейс для запуска Ansible-сценариев с зачатками CI/CD. С помощью него можно превратить [плейбук](https://habr.com/ru/company/southbridge/blog/569172/) в простую CI/CD систему. Это open source проект, он развивается с 2015 года и на данный момент у него 5200 звезд на GitHub.

Интерфейс Ansible Semaphore напоминает интерфейс Jenkins и AWX. Описание интерфейса можно найти в [документации](https://docs.ansible-semaphore.com/).

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

Так как предполагается небольшой проект, то возьмем модель разработки [Trunk](https://habr.com/ru/post/519314/). В отличие от Git-flow такая модель предполагает одну и ту же ветвь для разработки и для продакшна. Это сильно упрощает CI/CD.

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

![](/files/f8C99GqanWVIApRKXmzL)

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

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

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

* `build.yml` – для сборки приложения и отправки его в S3-хранилище.
* `deploy.yml` – для доставки приложения на сервера dev- и production-окружения.

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

## Интерфейс Ansible Semaphore

[intuitive-ui.mp4](https://ansible-semaphore.com/img/intuitive-ui.mp4)

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

* *Задача (Task)* – Процесс выполнения Ansible-плейбука.
* *Шаблон задачи (Task Template)* – шаблон, на основе которого создается задача.
* *Inventory* – список серверов, для которых будет выполняться задача.
* *Environment* – переменные окружения (extra vars в терминологии Ansible).
* *Ключ (Key)* – SSH-ключ или логин/пароль, по которому Ansible будет подключаться к серверам.
* *Репозиторий (Repository)* – git-репозиторий, где хранится код Ansible-плейбуков.

## Настройка проекта

**Создадим 3 Inventory** ([вот они](https://demo.ansible-semaphore.com/project/1/inventory)):

* *Build* – указывает на каком сервере будет собираться приложение.
* *Dev* – список серверов, на которые будет разворачиваться приложение в dev-окружении.
* *Production* – список серверов, на которые будет разворачиваться приложение в production-окружении.

**Создадим 3 окружения** ([вот они](https://demo.ansible-semaphore.com/project/1/environment)): Build, Dev, Production.

**Создадим 3 шаблона задач** ([вот они](https://demo.ansible-semaphore.com/project/1/templates)):

* *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](https://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](https://demo.ansible-semaphore.com/).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.konstantinsecurity.com/readme/architect/ci-cd/ansible-semaphore.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
