Перейти к основному содержимому

Workflows (Pro)

Workflows позволяют объединять несколько шаблонов задач в направленный граф (DAG) с ветвлением, согласованиями и паузами по таймеру. Запуск workflow продвигается автоматически по мере завершения каждого шага — вы один раз проектируете граф в визуальном редакторе, а затем запускаете его со страницы Workflows.

к сведению

Workflows — это функция Semaphore Pro. Пункт меню Workflows появляется только в том случае, если ваша подписка их включает.

Обзор

Workflow состоит из:

  • Узлов — шагов графа (запуск шаблона, ожидание согласования, пауза на задержку или аннотация в виде заметки).
  • Рёбер — связей между узлами, каждая из которых помечена условием, определяющим, когда запускается следующий узел.

Когда вы запускаете workflow, Semaphore создаёт запуск workflow. Сервер управляет продвижением: по мере завершения задач, разрешения согласований или истечения задержек нижестоящие узлы запускаются в соответствии с условиями рёбер.

Создание workflow

  1. Откройте свой проект и перейдите в раздел Workflows.
  2. Нажмите New Workflow.
  3. В графическом редакторе:
    • Перетащите узлы из палитры на холст.
    • Соедините узлы, перетащив связь от выходного разъёма одного узла к другому.
    • Щёлкните по узлу или ребру, чтобы отредактировать его свойства в боковой панели.
  4. Задайте имя (и при необходимости начальную версию для версионирования запусков).
  5. Исправьте все проблемы, перечисленные в панели Problems, затем нажмите Save.

Редактор проверяет граф перед сохранением. Корректный workflow должен содержать хотя бы один узел, ровно один стартовый узел (без входящих рёбер), не иметь циклов и иметь полную конфигурацию на каждом исполняемом узле.

Типы узлов

ТипНазначение
TaskЗапускает шаблон задачи. Для каждого узла можно переопределить параметры шаблона (inventory, окружение, Ansible limit, дополнительные аргументы CLI) через task params.
ApprovalПриостанавливает запуск до тех пор, пока пользователь с соответствующими правами не одобрит или не отклонит его. При необходимости можно задать тайм-аут (в секундах) и сообщение для согласования.
DelayОжидает заданное число секунд, прежде чем продолжить выполнение нижестоящих узлов. Полезно для периодов ожидания, окон обслуживания или разнесения зависимых шагов по времени.
NoteПроизвольная аннотация на холсте. Узлы Note не выполняются и не соединяются рёбрами — они предназначены только для документирования.

Схождение

Узлы с несколькими входящими рёбрами могут требовать завершения всех вышестоящих узлов (по умолчанию) или любого из них. Задайте параметр Convergence в панели свойств узла.

Узлы Delay

Узел Delay приостанавливает запуск workflow на заданную длительность (минимум 1 секунда). Во время ожидания:

  • Запуск остаётся в статусе running.
  • В представлении запуска на узле Delay отображается обратный отсчёт в реальном времени.
  • Нижестоящие узлы, соединённые рёбрами, не запускаются до завершения задержки.

Если запуск workflow остановлен во время активной задержки, задержка отменяется, и запуск завершается со статусом stopped.

Узлы Approval

Когда запуск достигает узла Approval, статус меняется на approval до тех пор, пока кто-нибудь не одобрит или не отклонит его. Элементы управления Approve/Reject появляются в представлении запуска. Отклонённые согласования завершают запуск с ошибкой в соответствии с условиями подключённых рёбер.

Условия рёбер

У каждого ребра есть условие, определяющее, когда нижестоящий узел становится готов к запуску:

УсловиеНижестоящий узел запускается, когда вышестоящий узел…
On successЗавершается успешно (по умолчанию).
On failureЗавершается с ошибкой.
AlwaysЗавершается в любом конечном состоянии (успех или ошибка).

Используйте ветки On failure для компенсирующих действий или уведомлений. Используйте Always, когда следующий шаг должен выполняться независимо от результата.

Запуск и мониторинг

  • Run workflow — запускает новый запуск из списка Workflows.
  • Представление запуска — полноэкранный граф со статусом каждого узла в реальном времени (running, success, failed, approval, обратный отсчёт задержки).
  • Stop — пока запуск находится в состоянии running или approval, пользователи с правом run_project_tasks могут его остановить. Все активные задачи останавливаются, ожидающие согласования отклоняются, а запуск помечается как stopped.

Статусы запуска: running, approval, success, failed, stopped.

Версионирование запусков

Задайте Start version для workflow (например, 1.0.0), чтобы включить метки версий для каждого запуска. Semaphore увеличивает версию при последующих запусках, аналогично шаблонам сборки.

Артефакты workflow (set_stats)

Когда задача Ansible в workflow использует set_stats, переменные сохраняются как артефакты workflow для этого запуска. Нижестоящие узлы задач в том же запуске автоматически получают их в качестве дополнительных переменных.

внимание

Если шаги workflow выполняются на удалённых runner'ах, артефакты workflow пока не передаются между шагами на удалённых runner'ах — они передаются только между задачами, выполняемыми локально на сервере Semaphore. Планируйте передачу артефактов соответствующим образом или размещайте шаги, создающие и потребляющие артефакты, на одном пути выполнения.

Права доступа

  • Управление workflows (создание, редактирование, удаление) требует прав на управление ресурсами проекта.
  • Запуск workflows требует права run_project_tasks.
  • Разрешение согласований требует соответствующего доступа к проекту (те же пользователи, которые могут запускать задачи в проекте).

API

Шаблоны workflow и запуски доступны по адресу /api/project/{project_id}/workflows. Схемы запросов и ответов, включая поля узла delay (delay_seconds) и endpoint остановки (POST …/runs/{run_id}/stop), см. в документации по API.