设置流水线触发器
触发器是启动流水线的源头。每个触发器都是画布上的一个节点,从节点库的 触发器 分区拖出。选中该节点会在右侧打开它的检查器——不存在常驻的触发器列表、触发器标签页或触发器页面。
打开触发器检查器
标题为“打开触发器检查器”的部分- 前往 设置 → 工作区 → 流水线模板。
- 点击模板所在行上的铅笔图标,打开编辑器。
- 在画布上选中一个触发器节点。右侧面板会随之出现,显示该触发器的设置。未选中任何内容时,面板保持隐藏。
添加触发器
标题为“添加触发器”的部分节点库的 触发器 分区把每种启动方式都列为独立节点:手动、计划、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 正是内置的工作树清理流水线所监听的事件:它携带被删除空间的 id,因此该次运行只会回收那个空间的工作树,而不会清扫整个工作区。
关于每个事件携带的载荷键,请参阅领域事件参考。
筛选事件触发器
标题为“筛选事件触发器”的部分选中 PR 状态已更改 节点。检查器中的状态标签是 UI 唯一能编写的筛选条件。点选 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
标题为“通过 Webhook”的部分拖入 Webhook 会生成一个随机令牌。选中该节点,即可从检查器中复制路径 POST /webhooks/<token>。
令牌同时也是 HMAC 密钥:请求必须携带 X-Hub-Signature-256: sha256=<hex>,其中的 hex 为 HMAC-SHA256(body, token)。校验失败的投递会被拒绝并记录日志,且无法重放。重复投递会按其去重键被忽略。
每个启动方式都是自己的图节点。从 定时 拉出一根连线只会接上“定时”;手动运行 可以先走另一条路径(例如一个条件节点),再汇入同一份工作。一次运行会进入与其事件类型匹配的那个启动节点,并跳过属于其他启动节点的子图。
触发器如何启动一次运行
标题为“触发器如何启动一次运行”的部分事件类型和筛选条件都匹配的已启用触发器会启动一次运行,并把事件的载荷作为该次运行的触发器载荷——步骤的提示词或脚本中的 {{key}} 正是据此解析的。携带自然键的事件会去重,因此同一事件触发两次不会启动两次运行。
即使触发器匹配,处于禁用状态的_模板_也会被拒绝。十三个内置模板中有八个默认禁用,因此在你打开模板之前,它们预置的触发器不会触发任何东西。
实用模式
标题为“实用模式”的部分- 只对手动路径设卡 —— 让 手动运行 经过一个条件节点,而 定时 直接接到工作上。每个启动节点拥有自己的连线。
- 审查每个新 PR —— 在
pr_review模板上使用事件 PR 已发布。 - 合并后清理 —— 使用事件 PR 状态已更改,筛选为
merged/closed/approved。内置的pr_merged_cleanup模板已经这样监听,另外还监听工单完成/取消、SpaceDeleted,以及一个每天执行、且每次重新预置时都会强制启用的计划,因为它是垃圾回收。 - 每夜清扫 —— 在首个节点为 bash 脚本的模板上,使用带时区的计划
0 2 * * *。 - 对外部系统做出反应 —— 使用 webhook 触发器,由调用方系统按上述方式对其请求体签名。