Процессы — это механизм автоматизации сложных бизнес-сценариев, который позволяет создавать визуальные схемы выполнения действий с поддержкой условной логики, параллельного выполнения и обработки ошибок.
Основные концепции
Элементы процесса
Процесс состоит из различных типов элементов:
- «Начало» — точка входа в процесс.
- «Задача» — выполнение конкретного действия.
- «Эксклюзивный шлюз» — условное ветвление.
- «Параллельный шлюз» — объединение нескольких веток процесса в одну.
- «Цикл» — повторение части процесса фиксированное число раз или обход JSON-массива из хранилища.
- «Шаблон» — вычисление Go-шаблона и запись результата в хранилище процесса.
- «Примечание» — текстовый блок.
- «Ошибка» — немедленная остановка процесса со статусом
Failed. - «Конец» — завершение процесса.
Создание процесса
Основная информация
Для создания процесса перейдите в раздел «Самообслуживание» → «Процессы» и нажмите кнопку «Создать».
Заполните следующие поля:
- «Название» — название процесса.
- «Описание» — подробное описание назначения процесса.
- «Ресурс» — один или несколько ресурсов, для которых может запускаться процесс.
- «Владелец» — пользователь, ответственный за процесс.
- «Команда владелец» — команда, ответственная за процесс.
- «Теги» — теги для категоризации процесса.
- «Иконка» — иконка для отображения в интерфейсе.
Настройка процесса
Настройка процесса происходит в визуальном редакторе на вкладке «Конфигурация».
Для настройки процесса необходимо сначала заполнить основные поля и создать его. После этого станут доступны вкладки «Конфигурация» и «Параметры».
Добавление элементов
- Добавьте элемент, выбрав его тип на панели редактора.
- Настройте параметры элемента в боковой панели (действие, условия и др.).
- Свяжите элементы друг с другом.
Типы элементов
Задача
Каждая задача — это запуск конкретного действия, созданного ранее в разделе «Самообслуживание» → «Действия».
Эксклюзивный шлюз
Эксклюзивный шлюз позволяет настраивать ветвление процесса по условиям. По умолчанию проверяется статус предыдущей задачи, и в зависимости от него выполнение идёт по «успешной» или «неуспешной» ветке.
В качестве условий для эксклюзивного шлюза можно задать либо проверку статуса предыдущей задачи, либо сравнение значений из шаблонов:
- Для проверки статуса предыдущей задачи используйте конструкцию
{{ .prev_task.status }}. - Для проверки значения из хранилища —
{{ .store.<путь> }}, в том числе вложенные ключи:{{ .store.notification.status }}. - Внутри цикла — поля текущего элемента:
{{ .store._loop.item.scan_type }}, флаги{{ .store._loop.first }}и{{ .store._loop.last }}.
Доступна проверка нескольких условий с комбинацией их результатов через оператор AND или OR.
Если проверка условий выполняется, процесс идёт по ветке «Истина» (зелёная); если нет — по ветке «Ложь» (красная). Порты «Истина» и «Ложь» можно размещать на любой стороне шлюза; связь можно перенести на другой порт.
Параллельный шлюз
Применяется для объединения нескольких веток в одну по заданным условиям.
В конфигурации параллельного шлюза можно настроить параметры ожидания:
- Ожидать выполнения всех входящих элементов для продолжения выполнения.
- Ожидать выполнения как минимум одного входящего элемента для продолжения выполнения.
При этом можно настроить, что именно считать «выполнением»:
- Только успешное завершение входящих в шлюз задач.
- Переход входящих задач в любой финальный статус (
Failed,Skippedи т. д.).
Параллельный шлюз также может использоваться для разделения веток, если подключается после элементов «Эксклюзивный шлюз» или «Цикл», либо в качестве вспомогательного элемента для повышения читаемости схемы процесса.
Цикл
Элемент «Цикл» повторяет ветку процесса либо фиксированное число раз, либо по каждому элементу JSON-массива из хранилища. После завершения всех итераций активируется элемент, подключённый к выходу из цикла.
Режим цикла
- Фиксированное число — поле «Количество итераций» от 1 до 10000. На каждой итерации в
{{ .store._loop.item }}доступен номер итерации (1, 2, 3…). - По коллекции — поле «Шаблон коллекции»: Go-шаблон, который при входе в цикл должен дать JSON-массив. Обычно указывают путь к массиву, записанному предыдущей задачей:
{{ .store.notification.engagements }}. Каждый элемент массива — одна итерация; текущий элемент доступен как{{ .store._loop.item }}.
Если массив пуст или ключ отсутствует, тело цикла не выполняется, процесс сразу переходит по связи «Выход из цикла».
Подробнее — в разделе «Хранилище процесса».
Исходящие связи
Из элемента «Цикл» должны выходить ровно две связи к разным элементам:
- «Тело цикла» — от этого порта строится ветка, которая выполняется на каждой итерации.
- «Выход из цикла» — по этой ветке выполнение продолжается после последней итерации.
Порты «Тело цикла» и «Выход из цикла» можно размещать на любой стороне элемента; связь можно перенести на другой порт.
Использование
Типовые сценарии:
- повторная проверка статуса внешней системы с фиксированным числом попыток;
- обход списка объектов из ответа API: задача записывает массив в хранилище, цикл в режиме «По коллекции» обрабатывает каждый элемент;
- вложенные циклы — контекст родителя доступен через
{{ .store._loop.parent }}.
Шаблон
Элемент «Шаблон» вычисляет Go-шаблон без дополнительного вызова действия и записывает результат в хранилище как строку.
Настройте:
- «Тело шаблона» — текст с плейсхолдерами
{{ .store.* }},{{ .process.* }}, внутри цикла —{{ .store._loop.* }}; - «Ключ в хранилище» — dot-path назначения, например
rendered_message; - «Подсказка формата» — как отображать значение при просмотре запуска (
text,markdown,html,json); не влияет на содержимое хранилища.
Примеры и ограничения — в разделе «Хранилище процесса».
Таймер
Элемент Таймер приостанавливает выполнение процесса до наступления заданного момента времени, после чего активируется следующий элемент.
Пока процесс ожидает только срабатывания таймера (других активных задач нет), запуск переводится в статус «Ожидание» (Wait). На панели визуализации запуска отображается баннер с ориентировочным временем возобновления.
Исходящие связи
От элемента «Таймер» должна исходить ровно одна связь к следующему элементу. Подключение возможно только через левый (вход) и правый (выход) порты.
При повторном прохождении таймера в том же запуске (например, через цикл) момент срабатывания рассчитывается заново.
Режимы расписания
В конфигурации таймера выберите «Расписание»:
- «Задержка после входа в элемент» — фиксированная пауза с момента, когда процесс дошёл до таймера. Задайте «Задержка (секунды)» от 1 до 1 209 600 (14 суток).
- «Произвольное расписание» — срабатывание в заданное время по календарю в выбранном часовом поясе (IANA, например
Europe/Moscow).
Для режима «Произвольное расписание» укажите «Шаблон»:
- «Определённый день недели» — «День недели», «Время суток» (час и минута), «Часовой пояс».
- «Определённое число каждого месяца» — «Число месяца» (1–31), «Время суток», «Часовой пояс». Если в месяце нет такого числа, используется последний день месяца.
- «Каждые N дней» — «Каждые N дней» (1–365), «Время суток», «Часовой пояс». Первое срабатывание — не ранее чем через N календарных дней от дня, когда процесс дошёл до таймера; при повторном входе в элемент расчёт выполняется снова.
«Время суток» задаётся в выбранном часовом поясе (поле «Часовой пояс»), если он отличается от пояса браузера.
Использование
Типовые сценарии: пауза перед повторной проверкой статуса внешней системы, отложенный запуск следующего шага, ожидание окна обслуживания или регулярного слота по календарю.
Примечание
Элемент Примечание предназначен для текстовых пояснений на схеме процесса: он не выполняется при запуске и не соединяется с другими элементами.
В конфигурации примечания можно задать:
- «Текст» — содержимое с поддержкой markdown разметки.
- «Цвет фона» — цвет заливки фона.
- «Цвет текста» — цвет текста.
Примечание всегда позиционируется за остальными элементами и может использоваться для визуального выделения частей процесса. Также это единственный элемент, размер которого можно изменить.
Ошибка
Элемент «Ошибка» принудительно переводит запущенный процесс в статус Failed: при достижении этого элемента выполнение всех действий процесса прерывается.
От элемента не должно исходить связей к следующим элементам.
Параметры процесса
На вкладке Параметры настраиваются параметры процесса, которые могут использоваться во всех действиях процесса.
Конфигурация и использование параметров процесса описаны в разделе «Шаблонизация».
Хранилище процесса
Хранилище процесса — JSON-объект для передачи данных между шагами одного запуска: идентификаторы, массивы, промежуточные результаты и тексты из элемента «Шаблон».
Полное описание правил записи, операций, контекста цикла и примеров сценариев — в разделе «Хранилище процесса».
Кратко:
- Одно хранилище на запуск — у каждого экземпляра процесса своё хранилище; его можно просмотреть на вкладке «Хранилище» при визуализации запуска.
- Вложенные пути — ключи задаются через точку:
notification.module_name,ctx.job.id; поддерживаются индексы массивов:items[0].status. - Запись по правилам — данные попадают в store после успешного выполнения действия (раздел «Обновление хранилища процесса») или при проходе элемента «Шаблон». Доступны операции записи строки и JSON, добавления, слияния и удаления, а также условие на каждое правило.
- Чтение — Go-шаблоны
{{ .store.<путь> }}в конфигурации действий и условиях шлюзов (см. «Хранилище процесса»).
Если ключа нет в хранилище, шаблон {{ .store.<путь> }} завершит шаг с ошибкой.
Запуск процесса
Ручной запуск
- Перейдите к сущности, для которой нужно запустить процесс.
- В меню сущности выберите «Запустить процесс».
- Выберите нужный процесс из списка.
- Заполните параметры процесса.
- Нажмите «Запустить».
Параметры запуска
При запуске процесса доступны:
- «Общие параметры процесса» — параметры, определённые в конфигурации процесса.
- «Параметры действий» — параметры для каждого действия в процессе.
- «Переменные окружения» — дополнительные переменные для выполнения.
Управление выполнением
Статусы процесса
Процесс может находиться в следующих статусах:
- «Создан» — процесс создан, но не запущен.
- «Выполняется» — процесс находится в процессе выполнения.
- «Приостановлен» — выполнение процесса приостановлено.
- «Завершен» — процесс успешно завершен.
- «Неудачно» — процесс завершился с ошибкой.
- «Отменен» — выполнение процесса было отменено.
Управление выполнением
Для активных процессов доступны следующие операции:
- «Приостановить» — временно остановить выполнение.
- «Возобновить» — продолжить выполнение после приостановки.
- «Остановить» — полностью остановить выполнение.
- «Принудительный перезапуск» — перезапустить процесс с начала.
Отслеживание состояния
В разделе «Запуски процессов» можно просмотреть:
- Список всех запусков процессов для сущности.
- Детальную информацию о каждом запуске.
- Логи выполнения действий.
- Статус каждого элемента процесса.
- Хронологию выполнения процесса.
- Содержимое хранилища процесса на вкладке «Хранилище».
Таймлайн
На панели визуализации запуска процесса доступна вкладка «Таймлайн», на которой отображается хронология выполнения процесса: для каждого элемента, который участвовал в текущем запуске, показаны время начала и окончания, длительность и статус.
Лог процесса
Для каждого запуска процесса доступен подробный лог выполнения: панель на схеме запуска, отдельное окно или док внизу экрана. Лог и JSON хранилища можно скачать с панели диалога запуска процесса.
Примеры использования
Создание проекта с настройкой
- «Начало» — запуск процесса.
- «Задача» — создание проекта в GitLab.
- «Эксклюзивный шлюз» — проверка успешности создания.
- «Задача» (при успехе) — настройка переменных проекта.
- «Задача» (при ошибке) — отправка уведомления об ошибке.
- «Конец» — завершение процесса.
Развертывание приложения
- «Начало» — запуск процесса развертывания.
- «Параллельный шлюз» — разделение на ветки.
- «Задача» (ветка 1) — создание namespace в Kubernetes.
- «Задача» (ветка 2) — создание секретов в Vault.
- «Параллельный шлюз» — ожидание завершения обеих веток.
- «Задача» — развертывание приложения.
- «Конец» — завершение процесса.
Ограничения
- Процессы не могут содержать более 100 элементов.
- Максимальное время выполнения процесса — 24 часа.
- Количество одновременных запусков процесса ограничено настройками системы.
- Некоторые действия могут быть недоступны для использования в процессах.