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