UI для
- Terraform
- OpenTofu
- Bash
- PowerShell
- Python
- Terragrunt
Интересности
- Проект развивается, обновления не очень крупные, но выходят часто
- SSO есть
- Веб хуки есть
- Уведомления на почту и в телегу есть
- Выполнение по расписанию есть
- Работа с GIT есть
- Пайплайны есть
- Проекты и права доступа есть
- Поддерживается темная тема и мобильная адаптивная версия
- Экспорта метрик я не нашел, есть issue на эту тему
Цены
- Бесплатная версия практически идеальна
- Платная версия с доп фишками
| Feature | Standard | Pro | Enterprise |
|---|---|---|---|
| Task execution | |||
| Project runners management | — | ||
| Terraform/OpenTofu HTTP backend | — | ||
| Export logs to external systems | — | ||
| Two-factor authentication (2FA) | — | ||
| Task execution summary | — | ||
| Built-in Swagger API Docs | — | ||
| Requesting features | — | ||
| Support | Community-based | 24h guaranteed email support (Mon–Fri) | 12h or less support reply, faster with upgrades |
| High availability | — | — | |
| Onboarding help | — | — | |
| Help with upgrades | — | — | |
| Custom feature development | — | — |
Установка
Я ставил в docker compose
semaphore:
ports:
- 80:3000
image: semaphoreui/semaphore:latest
env_file:
- secrets/semaphore.env
- secrets/secrets.env
volumes:
- ./data:/var/lib/semaphore
- ./config:/etc/semaphore
- ./tmp:/tmp/semaphore
depends_on:
vault-agent:
condition: service_healthy
restart: unless-stopped
После установки у нас сразу создается демо проект (но это не точно)
Проекты
Поддерживаются проекты, это все, что можно (кроме пользователей) объединенное в отдельном пространстве, права доступа назначаются на проект, внутри проекта все сущности, которые описываю дальше
Главная страница встречает логом задач
Task templates
Мы тут видим все плейбуки, и прочие задачи, отображается статус последнего выполнения, задачи поделены на группы при помощи табов
При нажатии на иконку запуска появляется всплывающее окно, содержимое зависит от типа задачи и ее параметров
Репозитории
В разделе репозиториев мы можем добавить репозитории, которые будем использовать, поддерживаются как публичные, так и приватные
При запуске задачи из репозитория происходит скачивание актуальной версии
Ansible Inventory
Тут мы можем либо править руками, либо указать пусть к файлу в репозитории
Variable groups
Тут без излишеств, только ручное добавление переменных и секретов, подтягивать откуда-то нельзя
Key Store
Содержит креды для самих плейбуков и репозиториев
Ansible Playbook
Тут мы указываем репозитрий с плейбуком, inventory, var group и собственно, сам путь к плейбуку
Ну и россыпь настроек, в том числе можно спрашивать пользователя при старте
Например, у меня для деплоя сертификата указывается домен (сертификат)
Terraform/Terragrunt/Opentofu
Тут все похоже: тепозиторий и путь к соответствующему файлу, workspace, variable group. Можно включить автоапрув и прочее
Bash/Python/Powershell
Тут минимальный функционал: опять репозиторий и скрипт, Var Group (устанавливаются переменные окружения)
Лог таски
При запуске отображается индикатор выполнения и можно посмотреть лог в режиме реального времени
Внизу видна общая информация по выполенению, но это фишка не Semaphore UI
Вкладка с деталями
Вкладка с общей информацией
А вот тут нас встречает первый платный функционал, количество и список серверов, на которых выполнилось успешно или с ошибкой надо смотреть на 1 владке, а не тут
Расписание
Можно настроить запуск таски по расписанию, тогда будет работать автоматом
Integrations
Тут мы можем создавать веб хаки для запуска наших тасок
Для каждой интеграции указывается таска, тип аутентификаиции и кючи, как мы видим, можно подключить гитхабу и битбакету в качестве вебхука (при пуше в репозиторий будет выполняться)
На странице интеграции указывается URL, который надо прописать на обратной стороне и переменные, которые извлекаются из запроса и подставляются в таску
Вот пример запуска вебхука при генерации нового letsencrypt сертификата
if [ ! -z "$WEBHOOK_URL" ] ; then
curl --location $WEBHOOK_URL \
--header "X-Token: ${WEBHOOK_TOKEN}" \
--header 'Content-Type: application/json' \
--data "{
\"domain\": \"$DOMAIN\"
}"
echo "✅ Webhook успешно отправлен"
fi
Права доступа
В рамках проекта настраиваются права доступа ко всему, что есть внутри проекта
Ну и остальные вклладки свойств проекта (history показывал одним из первых скриншотов)
Статистика запуска задач
Лог активности
Настройки
Тут можно настроить количество параллельных выполнений и ID TG чата для уведомлений
В чате это выглядит так
Можно настроить различные типы уведомлений
Вкладка Runners
Встречает нас еще одним платным функционалом, бесплатно Semaphore UI запускает все у себя, но для хомлабы этого достаточно
Официальная дока практически идеальна
Выводы
Очень крутая система для запуска автоматизаций, по сути, не надо в репозиториях писать раннеры, а достаточно из них вызывать вебхук
Бесплатный функционал вполне достаточен для жизни, можно частично обойти ограничения, например, вот так у меня vault-agent передает секреты из openbao
# Managed by vault-agent and https://openbao.domain.com
{{ with secret "kv/services/semaphore/secrets" }}
{{- range $key, $value := .Data.data -}}
{{ printf "%s=%s\n" $key $value }}
{{- end }}
# Forvard envs to playbook
{{ $first := true -}}
{{ printf "SEMAPHORE_FORWARDED_ENV_VARS='[" -}}
{{- range $key, $_ := .Data.data -}}
{{- if not $first }},{{ end -}}
{{- printf "\"%s\"" $key -}}
{{- $first = false -}}
{{- end -}}
{{- printf "]'\n" -}}
{{- end }}
































