跳转到内容

设置流水线触发器

触发器是启动流水线的源头。每个触发器都是画布上的一个节点,从节点库的 触发器 分区拖出。选中该节点会在右侧打开它的检查器——不存在常驻的触发器列表、触发器标签页或触发器页面。

  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 正是内置的工作树清理流水线所监听的事件:它携带被删除空间的 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 会生成一个随机令牌。选中该节点,即可从检查器中复制路径 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 触发器,由调用方系统按上述方式对其请求体签名。