跳到內容

設定管線觸發器

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

  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 狀態變更 節點。檢視器中的狀態標籤是介面唯一能編寫的篩選條件。點選 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 觸發器,並讓呼叫方系統依上述方式簽署其 請求本文。