設定管線觸發器
觸發器就是啟動管線的來源。每一個觸發器都是畫布上的一個節點,從節點庫的 觸發器 區段拖放而來。選取該節點,它的檢查器就會在右側開啟 —— 沒有常駐的觸發器 清單、沒有觸發器分頁,也沒有觸發器畫面。
開啟觸發器檢查器
標題為「開啟觸發器檢查器」的章節- 前往 設定 → 工作區 → 管線範本。
- 按範本資料列上的鉛筆圖示開啟編輯器。
- 在畫布上選取觸發器節點。右側面板便會顯示該觸發器的設定。未選取任何項目時, 面板會隱藏。
新增觸發器
標題為「新增觸發器」的章節節點庫的 觸發器 區段把每種啟動類型各自列為一個節點:手動、排程、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
標題為「透過 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 觸發器,並由呼叫的系統如上所述簽署其請求 主體。