跳到內容

監控管線執行

本頁說明執行開始之後的一切:找到它、讀懂每個步驟做了什麼,以及讓失敗的執行重新動起來。 若要啟動一次執行,請參閱手動執行管線。

  1. 在工作區側邊欄點選 管線。這個畫面是工作區的執行佇列 — 包含每一次執行, 最新的排在最前面。
  2. 用左側的篩選列來篩選。篩選條件正好有三個,每個都會即時顯示數量:全部、 執行中、已失敗。
  3. 用 ↑/↓(或 j/k)在表格中移動,並按 Enter 開啟目前聚焦的執行。點選資料列也有同樣的效果。

每一列都會顯示一個圖示,代表該次執行是如何開始的(手動執行是播放圖示;程式碼圖監看 是檔案圖示;其他情況則是自動觸發器)。工具提示會指出觸發器 — 手動、PR 已發布、 檔案變更 等等 — 若是監看執行,還會指出有哪些檔案變更。接著是管線名稱、狀態徽章、 作用中時長(queued 執行則顯示佇列位置),以及這次嘗試是多久以前開始的。作用中時長 不包含閒置的停止與重新啟動空檔,因此不等於實際經過的時間。

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

某次執行的頁面由上而下堆疊了三個部分。

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

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

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

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

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

已暫停是代理步驟一生中停留最久的地方:已派送的代理或核准閘門會扣住該步驟, 直到它的工作完成。引擎有兩道防線會讓整次執行失敗,而不是恢復它:一是已暫停超過 24 小時的步驟(extras.awaitApproval — 即 orchestration.awaitApproval 主體 — 可獲豁免;human.gate 則不在豁免之列),二是伺服器停止時正執行到一半的非冪等步驟。

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

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

對代理步驟而言,輸出是代理透過 submit_output 提交的結構化承載資料,而不是它 寫的散文。推理軌跡位於 代理活動,以及 檢視對話 背後的那段對話中。

對 bash 步驟而言,輸出是指令碼在結束碼為 0 時所寫入、去除前後空白的 stdout。 非零的結束碼會讓該步驟失敗,並以 stderr 的尾端內容作為錯誤訊息。

  1. 閱讀中繼資訊列上的失敗摘要;它會指出失敗的步驟。步驟面板的 錯誤 提示方塊則有 訊息內容。
  2. 檢查該步驟的 輸入 — 狀態鍵缺少或拼錯是最常見的原因。提示代理步驟會直接失敗 並指出未解析的預留位置;bash 步驟則會把它們渲染成空字串後照常執行,問題通常會在 下一步才浮現。
  3. 若是代理步驟,請開啟 檢視對話,看看代理究竟做了什麼。
  4. 在中繼資訊列上按下 重試。已完成與已跳過的步驟會保留其輸出;其他一切會被刪除 並重新執行,該次執行則切回執行中。這次嘗試的時長計時會重新開始。

值得優先檢查的常見原因:

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

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

這個畫面上沒有取消執行的控制項。pipeline.cancel 是存在的 RPC 操作,引擎也實作了它, 但管線 UI 中沒有任何地方會呼叫它;對步驟按下 終止執行中,或對執行按下 刪除, 是唯一可用的停止手段。

成本會依步驟回報,顯示在瀑布圖最右側的欄位,以及 代理活動 下每個卡片上。詳細 資料頁面沒有整次執行的總計,執行佇列中也沒有成本欄,因此要比較兩次執行的成本,就得 把它們各步驟的成本加總起來。