跳至內容

監察管線執行

這一頁涵蓋執行開始之後的一切:找到它、閱讀每個步驟做了甚麼,以及讓失敗的執行 重新動起來。如要開始一次執行,請參閱手動執行管線。

  1. 在工作區側邊欄點擊管線。這個畫面就是工作區的執行佇列 —— 每次 執行,最新的排在最前。
  2. 使用左側導軌來篩選。篩選器恰好有三個,每個都有即時計數:全部、 執行中、已失敗。
  3. 用 ↑/↓(或 j/k)在表格中 移動,然後按 Enter 開啟目前聚焦的執行。點擊資料列也有同樣效果。

每個資料列都會顯示一個圖示,代表該次執行是如何開始的(手動是播放圖示;程式碼圖 監看是檔案圖示;其他情況則是自動觸發器)。工具提示會寫出觸發器名稱 —— 手動、PR 發布、檔案變更 等等 —— 而對於監看型執行,還會列出哪些檔案 有變更。接着是管線名稱、狀態徽章、活動時長(若是 queued 執行則為佇列位置), 以及這次嘗試是多久之前開始的。活動時長不計入閒置的停止與重新開始空檔,因此它 並不是實際流逝的時間。

沒有針對已完成、已暫停或已取消執行的篩選器,沒有逐範本的篩選器,沒有時間範圍, 也沒有逐範本的執行歷史檢視。要比較同一個範本的多個執行,只能掃視佇列找出它的 名稱。

一次執行的頁面由上而下分為三個部分。

中繼資訊列 載有開始時間、活動時長、步驟進度(「3 / 7 個步驟」)、指出哪個 步驟出錯與原因的失敗摘要,以及重試與刪除操作。

時間瀑布圖 為每個步驟給出一條長條,附上其時長,而代理步驟還有以美分計的 成本。曾被重試的步驟會在時長後面顯示 ×N 後綴;該後綴是唯一會出現嘗試次數的 地方。

圖形畫布 會繪出範本,並顯示每個節點的即時狀態。選取節點會開啟它的步驟面板。

狀態 含義
等待中 已建立,尚未開始
排隊中 已獲准但被擱置:此範本的最大並行上限已滿;尚無步驟資料列
執行中 正在執行
已暫停 正在等待外部事物 —— 屬正常,不是卡住
已完成 成功結束
已失敗 以錯誤結束
已取消 由使用者或系統停止

步驟具備上述狀態,但少了排隊中,另外多了已跳過,用於路由器未有採納的 分支(及其現在已無法觸及的下游步驟)。

代理步驟大半生都處於已暫停:已派發的代理或核准閘門會扣住該步驟,直到它的 工作完成為止。兩道引擎防線會令整次執行失敗,而不是恢復它:步驟暫停超過 24 小時 (extras.awaitApproval —— 即 orchestration.awaitApproval 主體 —— 可獲豁免; human.gate 則不獲豁免),以及伺服器停止時仍在執行中途的非冪等步驟。

在畫布上選取節點。步驟面板會依次顯示:

  • 步驟失敗時的錯誤提示框,或步驟被略過時附有原因的已跳過提示框。
  • 已開始、已結束與時長。
  • 分支 —— 並行分支的分支索引。
  • 檢視對話 —— 跳至該步驟所執行所在的對話。管線對話會從側邊欄隱藏,所以 這是唯一的進入途徑。
  • 輸入與輸出,以可摺疊的 JSON 呈現。
  • 代理活動 —— 該步驟所派發的每次代理執行各有一張卡片,顯示其狀態、摘要、 時長與成本。

對於代理步驟,輸出是代理以 submit_output 提交的結構化載荷,而不是它的 文字敘述。推理追蹤則位於代理活動,以及檢視對話背後的對話之中。

對於 bash 步驟,輸出是指令碼在退出碼 0 時所寫入、經過修剪的標準輸出。非零 退出碼會令該步驟失敗,並以標準錯誤的末段作為錯誤訊息。

  1. 閱讀中繼資訊列上的失敗摘要;它會指出失敗的步驟。步驟面板的錯誤提示框則 載有訊息。
  2. 檢查步驟的輸入 —— 狀態鍵缺失或拼寫錯誤是最常見的原因。提示代理步驟會 直接失敗並指出未解析的佔位符;bash 步驟則會把它們呈現為空字串並照樣執行, 問題通常會在下一步才浮現。
  3. 對於代理步驟,開啟檢視對話,閱讀代理實際做了甚麼。
  4. 在中繼資訊列上按重試。已完成與已跳過的步驟會保留其輸出;其餘全部都會被 刪除並重新執行,而該次執行會切回執行中。這次嘗試的時長計時會重新開始。

值得先檢查的常見原因:

  • 逾時 —— 步驟超出了它的逾時(毫秒)。請記住這個欄位是毫秒。
  • 指令碼錯誤 —— bash 指令以非零退出碼結束,或伺服器主機的 PATH 上沒有 bash。
  • Schema 驗證 —— 代理的 submit_output 載荷不符合步驟的輸出 schema。
  • 未解析的佔位符 —— 提示代理步驟所參照的 {{key}} 從未在上游寫入。錯誤 訊息會列出每一個未解析的鍵。
  • 未註冊的主體 —— 主體鍵未註冊的步驟會在載入範本時發出警告,之後就永遠 不會執行。

選取執行中的步驟,然後按步驟面板標題列中的終止執行中按鈕。這會終止該步驟的 行程、將該步驟標記為已失敗,因此令整次執行失敗 —— 每個仍開啟的兄弟分支都會隨之 一併結束。

這個畫面上沒有取消整次執行的控制項。pipeline.cancel 是一項 RPC 操作,引擎也有 實作它,但管線介面中沒有任何地方會呼叫它;在步驟上使用 Kill running,或在執行 上使用 Delete,是唯一可用的停止手勢。

成本按步驟回報,顯示在瀑布圖最右側的欄位,以及代理活動下每張卡片上。詳情頁 上沒有整次執行的總額,執行佇列中也沒有成本欄,因此要比較兩次執行的成本,就只能 把它們各步驟的成本加起來。