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

Настроить триггеры конвейера

Конвейер запускает триггер. Каждый триггер — это узел на холсте, который перетаскивают из раздела Триггеры библиотеки узлов. При выборе этого узла справа открывается его инспектор — постоянного списка триггеров, вкладки триггеров и экрана триггеров не существует.

  1. Перейдите в Настройки → Рабочее пространство → Шаблоны конвейеров.
  2. Нажмите на карандаш в строке шаблона, чтобы открыть редактор.
  3. Выберите узел триггера на холсте. Справа появится панель с настройками этого триггера. Если ничего не выбрано, панель скрыта.

В разделе Триггеры библиотеки узлов каждый вид запуска представлен отдельным узлом: ручной запуск, расписание, webhook и по одной карточке на каждое доменное событие. Найдите merged, ticket или имя типа (PrMerged) и перетащите карточку на холст. В новом шаблоне на входном якоре также отображается призрачная плитка Добавить триггер — выберите из того же списка с поиском.

Триггер вставляется сразу. Новые автоматические триггеры создаются отключёнными, чтобы перетаскивание не запустило конвейер до того, как вы его настроите. Включите его переключателем Включено в инспекторе или удалите значком корзины.

Перетащите Ручной запуск (или выберите его из призрачной плитки) и включите Включено в его инспекторе. Именно после этого шаблон появляется в окне запуска. Это не особый случай — переключатель записывает обычную строку триггера с типом события manual. Она сохраняется сразу; сохранять ничего не нужно.

Тот же переключатель стоит за Ручной запуск в заголовке редактора, рядом с объявленными входными данными шаблона.

Эти события запускают конвейер:

Название в списке Событие
Открыт внешний PR ExternalPrDetected
PR опубликован PullRequestPublished
Изменился статус PR PullRequestStatusChanged
PR смержен PrMerged
Получено сообщение MessageReceived
Тикет создан TicketCreated
Статус тикета изменён TicketStatusChanged
Тикет назначен TicketAssigned
Тикет выполнен TicketCompleted
Сбой тикета TicketFailed
Тикет отменён TicketCancelled
Превышен порог бюджета BudgetThresholdCrossed
Репозиторий добавлен RepoAdded
Запись встречи остановлена MeetingRecordingStopped
Навык обновлён SkillUpdated
Пространство удалено SpaceDeleted

Именно на SpaceDeleted подписан встроенный конвейер очистки worktree: событие несёт id удалённого пространства, поэтому запуск освобождает worktree ровно этого пространства, а не обходит всё рабочее пространство.

О ключах полезной нагрузки, которые несёт каждое событие, см. в справочнике по доменным событиям.

Выберите узел Изменился статус PR. Чипы статусов в инспекторе — единственный фильтр, который можно задать в интерфейсе. Нажмите любой из merged, closed, approved, opened, reopened; тогда триггер срабатывает, только когда status события совпадает с одним из них. Если не выбрано ни одного чипа, фильтра нет.

Поля для произвольного JSON-фильтра нет. Ключ фильтра, которого нет в полезной нагрузке события, не совпадёт никогда, поэтому не задавайте его вручную для ключа, который вы не проверили по справочнику доменных событий.

Выберите узел Расписание, чтобы изменить момент срабатывания. Поля инспектора сохраняются в том виде, в каком вы их оставили:

Поле Описание
Расписание (cron или every:seconds) Cron-выражение из пяти полей, например 0 9 * * 1, или интервал, например every:86400. Число без префикса приводится к виду every:<n>.
Часовой пояс (необязательно) Зона IANA, например Europe/Paris. По умолчанию — UTC.
При пропущенных запусках Что делать со срабатываниями, пропущенными, пока сервер был недоступен: Запустить один раз объединяет все пропущенные слоты в одно срабатывание при перезапуске (значение по умолчанию), Пропустить возобновляет работу со следующего будущего слота.

В строке-сводке плитки на холсте интервал указывается только для формы every:<seconds>; для cron-выражения отображается просто «Расписание».

Перетаскивание узла Webhook создаёт случайный токен. Выберите узел, чтобы скопировать путь POST /webhooks/<token> из инспектора.

Токен — это также секрет HMAC: запрос должен содержать X-Hub-Signature-256: sha256=<hex>, где hex — это HMAC-SHA256(body, token). Доставка, не прошедшая проверку, отклоняется и записывается в журнал, и её нельзя воспроизвести повторно. Дубликаты игнорируются по их ключу дедупликации.

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

Включённый триггер, у которого совпали и тип события, и фильтр, запускает конвейер, а полезная нагрузка события становится полезной нагрузкой триггера запуска — именно с ней сопоставляется {{key}} в промпте или скрипте шага. События, несущие естественный ключ, дедуплицируются, поэтому одно и то же событие, сработавшее дважды, не создаёт два запуска.

Отключённый шаблон отклоняется, даже если его триггер совпал. Восемь из тринадцати встроенных шаблонов поставляются отключёнными, поэтому их предустановленные триггеры срабатывают вхолостую, пока вы не включите шаблон.

  • Ограничить только ручной путь — проведите Ручной запуск через узел условия, а Расписание — напрямую к работе. У каждого старта свои провода.
  • Проверять каждый новый PR — событие PR опубликован в шаблоне pr_review.
  • Убирать после слияния — событие Изменился статус PR с фильтром merged / closed / approved. Встроенный шаблон pr_merged_cleanup уже слушает именно эти события, а также тикет выполнен/отменён, SpaceDeleted и ежедневное расписание, которое принудительно включается при каждом повторном заполнении, поскольку это сборка мусора.
  • Ночная уборка — расписание 0 2 * * * с часовым поясом в шаблоне, первый узел которого — bash-скрипт.
  • Реагировать на внешнюю систему — триггер webhook, при этом вызывающая система подписывает тело запроса, как описано выше.