跳至內容

設定管線觸發器

觸發器就是啟動管線的來源。每一個觸發器都是畫布上的一個節點,從節點庫的 觸發器 區段拖放而來。選取該節點,它的檢查器就會在右側開啟 —— 沒有常駐的觸發器 清單、沒有觸發器分頁,也沒有觸發器畫面。

  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

內建的 worktree 清理管線所監聽的正是 SpaceDeleted:它會帶上所刪除空間的 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_review 範本上使用 PR 發布 事件。
  • 合併後清理 —— PR 狀態變更 事件,篩選為 merged / closed / approved。內建的 pr_merged_cleanup 範本已經這樣監聽, 另外還有工單完成/取消、SpaceDeleted,以及一個每次重新植入時都會強制啟用的 每日排程,因為它屬於垃圾回收。
  • 每晚清掃 —— 在首個節點為 bash 指令碼的範本上,使用帶時區的排程 0 2 * * *。
  • 回應外部系統 —— 使用 webhook 觸發器,並由呼叫的系統如上所述簽署其請求 主體。