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

GH-200 常見問題

考試資訊

GH-200 對應哪個認證?

GitHub Actions 認證;本站以 Microsoft Learn 的認證頁與 Study Guide 為範圍依據。

考試時間與及格分數是多少?

資料記載為 100 分鐘、及格分數 700;正式應考前請重新核對官方認證頁。

考試提供哪些語言?

English、Spanish、Portuguese (Brazil)、Korean、Japanese。

這個網站是官方出版品嗎?

不是。本站是繁體中文原創學習整理,不含實際考題、考古題或外洩題庫。

五個領域與權重是什麼?

D1 撰寫與管理工作流程、D4 管理企業的 GitHub Actions:各 20–25%;D2 使用與疑難排解、D3 撰寫與維護 actions:各 15–20%;D5 保護與最佳化:10–15%。技能範圍標示為 2026 年 1 月版。

D1

排程工作流程為什麼一直沒有執行?

schedule 只在預設分支的檔案上執行;檔案還在功能分支時不會被排程觸發。

pull_request 事件的 GITHUB_SHA 是哪個 commit?

PR 的合併 commit,測的是合併後的結果;schedule 與 workflow_run 則是預設分支的最後 commit。

inputs 與 github.event.inputs 有什麼差別?

inputs 保留 boolean 型別;github.event.inputs 會把 boolean 轉成字串,所以兩者在條件上並不等價。

矩陣的 include 會怎麼處理?

加進所有不衝突的原始組合;會覆寫既有值時成為獨立的新組合。每次執行最多 256 個 job。

job 怎麼連到服務容器?

job 在容器內時用服務標籤當主機名稱,不需 ports;直接在 runner 上時用 localhost 並對應 ports。

快取可以還原哪些分支的內容?

目前分支與預設分支;PR 還可還原基底分支。兄弟分支與子分支拿不到。

團隊在功能分支寫了每晚執行的 schedule 工作流程,等了幾天都沒跑,就開始檢查 cron 語法,錯在哪?

schedule 只在預設分支的檔案上執行;先確認檔案是否已合併到預設分支,再看語法。

workflow_dispatch 有 boolean 輸入 dry_run,條件寫 github.event.inputs.dry_run == false 永遠不成立,錯在哪?

github.event.inputs 會把 boolean 轉成字串;改用保留型別的 inputs.dry_run。

矩陣 2×2 共 4 組,exclude 一組後 include 一組新的 macOS 組合,團隊算出 3 個 job,錯在哪?

include 的新組合與既有組合衝突時成為獨立的新組合,所以是 4 − 1 + 1 = 4 個。

lint 設了 continue-on-error,後面的步驟用 conclusion == 'failure' 判斷,從沒執行,錯在哪?

conclusion 是套用 continue-on-error 之後的結果,會是 success;要看失敗過用 outcome。

團隊以為同一個 repository 的所有分支共用快取,結果兄弟分支一直未命中,錯在哪?

一次執行只能還原目前分支與預設分支(PR 再加基底分支)的快取,兄弟分支拿不到。

D2

重新執行有什麼限制?

初次執行後 30 天內、最多重跑 50 次,沿用原本的 GITHUB_SHA 與 GITHUB_REF,不會拿到新 commit。

怎麼取得 runner 層級的診斷記錄?

設定 ACTIONS_RUNNER_DEBUG 為 true,或重新執行時勾選 Enable debug logging,再下載封存檔看 runner-diagnostic-logs。

用 REST API 下載成品要注意什麼?

archive_format 必須是 zip,回應是 302,Location 的網址只有 1 分鐘有效,要立刻跟著抓。

怎麼分辨該用可重用工作流程、複合 action 還是起始工作流程?

要集中維護整個工作流程用可重用工作流程(job 層級);要封裝一組步驟用複合 action(步驟層級);要給新專案一個起點用起始工作流程(複製後獨立)。

測試失敗後修好程式碼並推送,卻在舊執行上按 Re-run failed jobs 想驗證,錯在哪?

重跑沿用原本的 GITHUB_SHA,不會拿到新 commit;要看新推送觸發的新執行。

在日誌頁用 Search logs 搜不到確定存在的文字,團隊以為日誌遺失,錯在哪?

Search logs 只搜尋已展開的步驟;先展開要找的步驟,或下載日誌封存檔。

腳本把成品下載的 Location 網址存起來,隔天才使用而失敗,錯在哪?

網址只有 1 分鐘有效;每次下載都要重新呼叫端點取得新網址並立刻使用。

複合 action 需要 secret 卻讀不到,團隊想靠發佈到 Marketplace 解決,錯在哪?

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

團隊對排程工作流程按 Disable workflow,以為進行中的執行會立刻取消,錯在哪?

停用只是讓它不再觸發,不會取消進行中的執行;停用期間也不能重新執行,要先啟用。

D3

三種 action 類型的差別?

Docker 容器 action 只能在 Linux;JavaScript action 跨 Linux、macOS、Windows;複合 action 把多個步驟包起來,跑在呼叫它的 job 的機器上。

JavaScript action 為什麼不該提交 node_modules?

官方說提交可能造成問題;應用 rollup.js 或 @vercel/ncc 打包成單一檔案並提交,main 指向它。

發佈到 Marketplace 需要哪些條件?

公開 repository、根目錄單一 action.yml、name 唯一、帳號接受開發者協議;符合條件即立即發佈,GitHub 不先審核。

同事把 node_modules 提交進 action 的 repository,說這樣使用者不用安裝,錯在哪?

官方說提交可能造成問題;應用 rollup.js 或 @vercel/ncc 打包成 dist/index.js 並提交。

輸入 token 設了 required: true,使用者沒傳值,action 卻照常跑,團隊以為是平台錯誤,錯在哪?

required: true 不會自動報錯,action 要自己檢查輸入,必要時 core.setFailed。

組織啟用 immutable releases 後,發佈流程強制推送移動 v1 標籤失敗,團隊以為是權限問題,錯在哪?

不可變 release 把標籤鎖定在特定 commit,無法移動;要調整版本策略,例如讓使用者釘到具體標籤或 SHA。

團隊把 Docker 容器 action 用在 Windows 與 macOS 的 runner 上,結果失敗,錯在哪?

Docker 容器 action 只能在 Linux runner 執行;跨平台需求改用 JavaScript action 或複合 action。

D4

怎麼限制組織能使用的 actions?

在 Actions 政策選限制模式,勾選 GitHub 建立的、已驗證建立者或指定樣式;樣式前加驚嘆號表示封鎖,最多 1000 個。

自管 runner 的更新與排隊有哪些時間?

停用自動更新後要在 30 天內更新;沒被接起 60 秒會重新排隊;沒有符合的 runner 排隊超過 24 小時失敗。

secrets 和 variables 設在哪裡?有什麼優先順序?

組織、repository、環境三層;同名時環境優先於 repository 與組織;variables 用 vars context 讀取。

管理員把政策改成只允許組織自己的 actions,隔天所有 CI 在 checkout 失敗,錯在哪?

該設定會封鎖所有 GitHub 作者的 actions,包含 actions/checkout;要另外勾選 GitHub 建立的 actions。

企業停用了某政策,組織管理員想在自己的組織重新啟用它,錯在哪?

企業停用的政策,個別組織與 repository 不能再啟用;組織只能進一步限制。

團隊停用自管 runner 的自動更新,一個月後 job 都不再被排到那些 runner,錯在哪?

停用自動更新後必須在新版釋出後 30 天內更新,否則 GitHub 停止排 job 給它。

公開 repository 想用組織預設群組的自管 runner 省錢,以為群組預設就會開放,錯在哪?

群組預設只開放私有 repository,公開 repository 要覆寫;而且自管 runner 幾乎不該用在公開 repository。

工作流程寫 if: secrets.TOKEN != '' 而失效,團隊想把 secret 改存成 variable,錯在哪?

問題是 secrets 不能直接用在 if;應先放進 job 層級環境變數再判斷,而把機密放進 variable 不會被遮蔽。

D5

怎麼防範 script injection?

把運算式的值設成環境變數再在指令碼引用,或改用 action 傳引數;並限制 permissions。

OIDC 要做哪些設定?

工作流程加 id-token: write,並在雲端端至少定義一個信任條件(例如限定 sub);id-token: write 不給資源寫入權限。

固定 SHA 與使用標籤有什麼差別?

標籤可被移動或刪除,完整 commit SHA 不會;要確認 SHA 來自原 repository 而非 fork。

步驟 run 直接插入 PR 標題,團隊覺得加上單引號就安全,錯在哪?

${{ }} 在 shell 執行前被替換成文字,引號可被跳脫;應設成環境變數再引用,或改用 action。

團隊為 OIDC 加了 id-token: write,就以為雲端部署已安全,錯在哪?

還要在雲端端至少定義一個信任條件;id-token: write 只允許請求權杖,不給資源寫入權限。

第三方 action 釘在 @v4,之後標籤被移到惡意 commit,團隊以為版本號夠具體,錯在哪?

標籤可被移動或刪除;應固定完整 commit SHA(確認來自原 repository),或使用 lockfile。

concurrency 同時設了 queue: max 與 cancel-in-progress: true,團隊期待兩者並用,錯在哪?

兩者不能同時使用,否則工作流程驗證失敗;要排隊用 queue: max,要取消舊的用 cancel-in-progress。

8 小時的批次作業放在 GitHub 代管 runner,團隊以為整次執行上限 35 天就夠,錯在哪?

35 天是整次執行的上限;單一 job 在代管 runner 最長 6 小時,自管 runner 是 5 天。