GH-200 數位教科書 開啟互動版

D2:使用與疑難排解工作流程

D2-O1 解讀工作流程行為與結果

這個目標考的是「讀」:看著一份設定與一份日誌,說出它為什麼這樣跑、為什麼失敗、該怎麼重跑。先從設定判斷觸發條件與效果,再到執行紀錄驗證。

從設定與日誌辨認觸發條件

診斷失敗的執行

  1. 開 repository 的 Actions 頁籤,選工作流程與該次執行,再點 Jobs 底下的 job。需要有讀取權限。
  2. 失敗的步驟會自動展開,每個步驟都顯示耗時。
  3. 點步驟的行號可以產生指到那一行的連結。
  4. 右上角的 Search logs 只搜尋已展開的步驟,所以要先展開要找的步驟。
  5. 從齒輪選單可以 Download log archive。若工作流程只重跑了一部分,封存檔只含重跑的 job,要看前一次嘗試就必須下載先前嘗試的封存檔。
  6. 命令列用 gh run view RUN_ID --log 看整次執行的日誌,--log-failed 只看失敗的步驟,gh run view --job JOB_ID --log 看單一 job。

啟用除錯記錄

重新執行

做法 UI CLI
整個工作流程 Re-run all jobs gh run rerun RUN_ID
只有失敗的 job Re-run failed jobs gh run rerun RUN_ID --failed
單一 job job 旁的重新執行圖示 gh run rerun --job JOB_ID

解讀矩陣、錨點與合併後的結果

判斷練習

情境 A: 某次執行失敗後,你修好了程式碼並推送,然後在舊的執行上按 Re-run failed jobs,結果還是同樣的錯。

解析: 重跑使用原本事件的 GITHUB_SHA 與 GITHUB_REF,不會拿到新 commit。新推送會觸發新的執行;要驗證修復就看新執行,不是重跑舊的。

情境 B: 你要看某個 job 的 runner 如何被配置,一般日誌看不出來。

解析: 重新執行並勾選 Enable debug logging(或設定 ACTIONS_RUNNER_DEBUG),下載封存檔,在 runner-diagnostic-logs 資料夾找 runner 與 worker 程序記錄。

來源:Re-run workflows and jobs(GH200-DOC-14)、Use workflow run logs(GH200-DOC-15)、Enable debug logging(GH200-DOC-16)、REST: workflow runs(GH200-DOC-22);2026-11-03 以頁面原文比對本節的數字與條件。重新執行頁面沒有涵蓋 run_attempt、可重用工作流程與矩陣 job 的重跑細節,本節沒有補寫。

D2-O2 存取工作流程成品與記錄

在介面、命令列與 API 取得

要拿什麼 介面 CLI REST API
單次執行的日誌 執行頁面的 Download log archive gh run view --log GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs
成品 執行頁面的 Artifacts 區塊 (本節未核對) GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/zip
刪除日誌 Delete all logs(需要寫入權限) — DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs(204)
刪除成品 Artifacts 區塊 — DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}(204)
刪除整次執行 執行頁面選單 gh run delete DELETE /repos/{owner}/{repo}/actions/runs/{run_id}(204,需要寫入權限)

REST API 的細節

在工作流程內取得成品

actions/download-artifact 預設只能取得同一次執行稍早上傳的成品;跨執行下載要提供 token 與執行編號。指定 name 下載單一成品,不指定則全部下載,各放進以成品命名的資料夾。上傳端回傳的 digest(SHA256)會被下載端重新計算比對,不符時在介面與日誌顯示警告。

判斷練習

情境 A: 你的指令稿呼叫成品下載端點後拿到 302,並把 Location: 網址存起來,隔天才用它下載,結果失敗。

解析: 下載網址只有 1 分鐘有效。每次要下載時都重新呼叫端點,取得新的 Location: 網址並立刻使用。

情境 B: 需要清掉一個含大量成品的舊執行,以釋放儲存空間。

解析: 刪除該次執行(DELETE .../actions/runs/{run_id},需要寫入權限)會連同它的成品一起刪除;只想保留日誌、清掉成品時,改刪個別成品。

來源:REST: artifacts(GH200-DOC-20)、REST: workflow runs(GH200-DOC-22)、Use workflow run logs(GH200-DOC-15)、Remove workflow artifacts(GH200-DOC-11)、Store and share data(GH200-DOC-12);2026-11-03 以頁面原文比對。gh 指令中下載成品的子指令,本節沒有核對。

D2-O3 使用與管理工作流程範本

三種重用機制,三種用法

機制 重用什麼 在哪裡使用 關鍵限制
可重用工作流程(reusable workflow) 整個工作流程檔(含多個 job) job 層級:jobs.<id>.uses 最多 10 層;呼叫後不能再往該 job 加步驟;可以用 secrets;不能發佈到 Marketplace
複合 action(composite action) 一組步驟 步驟層級:steps[*].uses 不含 job;跑在呼叫它的 job 的機器上;不能直接使用 secrets(要用 input 傳入);可以發佈到 Marketplace;一個工作流程最多巢狀 10 個複合 action
起始工作流程(starter workflow/workflow template) 新工作流程的起點範本 不被「呼叫」,建立工作流程時挑選 複製後就是你自己的檔案;起始工作流程內部可以參考可重用工作流程

使用起始工作流程

  1. repository 的 Actions 頁籤 → New workflow(已有工作流程時)。
  2. 在 Choose a workflow 搜尋關鍵字或依分類篩選;頁面會推薦工作流程範本。
  3. 對想用的範本按 Configure;若註解寫了額外設定就先照做;範本用到的 secrets 要存成 repository secrets。
  4. 視需要修改(例如 on),按 Start commit,選擇直接提交到預設分支或開 PR。

組織的起始工作流程(給組織成員挑選)

使用組織層級的可重用工作流程

呼叫方式是在 job 上寫 uses: 擁有者/儲存庫/.github/workflows/檔名@ref(同一 repository 用 ./.github/workflows/檔名);ref 可以是 SHA、發佈標籤或分支,標籤與分支同名時標籤優先,用 commit SHA 最穩定也最安全。uses 的值不能使用 context 與表達式。可重用工作流程必須放在 .github/workflows,不支援子目錄。誰能存取組織內的可重用工作流程屬於領域四的治理,見該章。

停用與刪除

判斷練習

情境 A: 平台團隊要讓全公司的 CI 邏輯集中維護,使用者的 repository 只需要幾行設定就能呼叫,且更新後各專案要能用同一個版本。

解析: 用可重用工作流程:集中維護、以 workflow_call 被 job 呼叫,並用標籤或 SHA 控制版本。起始工作流程複製後就各自獨立,無法集中更新。

情境 B: 某個複合 action 需要使用 secret,卻拿不到。

解析: secrets context 不能在複合 action 內直接使用,要把 secret 當作 input 由呼叫它的工作流程傳入。

情境 C: 團隊想暫時停止一個排程工作流程,但不想失去設定。

解析: 用 Disable workflow。檔案保留、之後可以 Enable workflow;停用不會取消進行中的執行。

來源:Reusing workflow configurations(概念)(GH200-DOC-19)、Use workflow templates(GH200-DOC-18)、Create workflow templates(GH200-DOC-21)、Reuse workflows(GH200-DOC-08)、Disable and enable workflows(GH200-DOC-17)、Study Guide(GH200-SG);2026-11-03 以頁面原文比對本節的數字與條件。使用起始工作流程的頁面沒有說明建立後是否仍與範本連結,「建立後就獨立」一句引用自 Study Guide。