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

D4 模擬題:管理企業的 GitHub Actions

D4「管理企業的 GitHub Actions」17 題原創模擬題,附正確答案、解析與常見陷阱。選項順序在互動版會隨機排列。

第 46 題(D4-O1)

組織把 Actions 政策設成只允許組織自己的 actions 與可重用工作流程,沒有勾選任何其他來源。之後工作流程裡的 actions/checkout 會怎樣?

單選題,選項:

  • 被封鎖,因為 GitHub 作者的 actions 也不在允許範圍內
  • 照常執行,因為 checkout 屬於 GitHub 內建的步驟
  • 被封鎖,但只有私有 repository 的工作流程受影響
  • 照常執行,但只限預設分支上的工作流程
看答案與解析

正確答案:被封鎖,因為 GitHub 作者的 actions 也不在允許範圍內

解析:只允許組織自己的 actions 會封鎖所有 GitHub 作者的 actions,所以 actions/checkout 也不能用;要放行需另外勾選 GitHub 建立的 actions。

常見陷阱:checkout 幾乎每個工作流程都用,容易假設它永遠可用;政策沒有為 GitHub 自己的 actions 保留例外。

依據:Disabling or limiting GitHub Actions for your organization

在互動版作答這題

第 47 題(D4-O1)

在允許的 actions 清單輸入「*, !space-org/action@*」。這代表什麼意思?

單選題,選項:

  • 只允許 space-org 的 action,其餘一律封鎖
  • 除了 space-org/action 之外,全部允許
  • 封鎖所有 space-org 的 actions,其餘只允許本機 action
  • 除了 space-org/action 的最新標籤之外,全部允許
看答案與解析

正確答案:除了 space-org/action 之外,全部允許

解析:樣式以逗號分隔,* 是萬用字元,前面加 ! 表示封鎖;所以這串是除了 space-org/action 的任何版本之外全部允許。清單最多 1000 個樣式。

常見陷阱:驚嘆號容易被讀成「強調」;在這份清單裡它代表封鎖,且預設只有列出的樣式才被允許。

依據:Disabling or limiting GitHub Actions for your organization

在互動版作答這題

第 48 題(D4-O1)

組織啟用「要求 actions 固定到完整 commit SHA」後,可重用工作流程仍然可以用標籤來參照。

是非題:判斷敘述是否正確。

看答案與解析

正確答案:正確

解析:這個要求適用於組織的 actions 與 GitHub 作者的 actions;可重用工作流程仍可用標籤參照,已被鎖定檔鎖定的相依項目也滿足要求。

常見陷阱:「全部都要釘 SHA」是直覺的解讀;政策把可重用工作流程排除在這個要求之外。

依據:Disabling or limiting GitHub Actions for your organization

在互動版作答這題

第 49 題(D4-O1)

企業停用了某項 Actions 政策,某組織的管理員想在自己的組織重新啟用它。結果如何?

單選題,選項:

  • 可以,因為組織可以覆寫企業的所有政策
  • 不行,企業停用的政策下層不能再啟用
  • 可以,但只限該組織的私有 repository
  • 不行,除非企業擁有者把該組織加入例外清單
看答案與解析

正確答案:不行,企業停用的政策下層不能再啟用

解析:企業啟用的政策,組織或 repository 還能選擇性停用;企業停用的政策,個別組織與 repository 不能再啟用。組織只能進一步限制,不能放寬。

常見陷阱:政策只往更嚴格的方向傳遞;覆蓋方向不是「近的優先」,要看企業是啟用還是停用。

依據:Enforcing policies for GitHub Actions in your enterprise

在互動版作答這題

第 50 題(D4-O1)

公開 repository 要求首次貢獻者的 fork PR 工作流程先經核准。下列哪一類工作流程不受這項核准設定影響,一律執行?

單選題,選項:

  • 由 pull_request_target 觸發的工作流程
  • 由 workflow_run 觸發的工作流程
  • 由 repository_dispatch 觸發的工作流程
  • 由 pull_request 觸發的工作流程
看答案與解析

正確答案:由 pull_request_target 觸發的工作流程

解析:由 pull_request_target 觸發的工作流程一律執行,不受 fork PR 核准政策影響;這也是它屬於特權觸發條件、需要特別小心的原因。

常見陷阱:核准政策看起來像是對所有 PR 工作流程一視同仁;它管的是 pull_request 這類,不含 pull_request_target。

依據:Disabling or limiting GitHub Actions for your organization

在互動版作答這題

第 51 題(D4-O1)

「Allow GitHub Actions to create and approve pull requests」這個設定的預設值是什麼?

單選題,選項:

  • 啟用,但只限 Dependabot 與 GitHub App 建立的 PR
  • 啟用,且同時適用於 fork 的 pull request
  • 依組織方案決定,Team 方案預設啟用
  • 停用,工作流程預設不能建立或核准 PR
看答案與解析

正確答案:停用,工作流程預設不能建立或核准 PR

解析:這個設定預設停用,工作流程預設不能建立或核准 pull request,需要管理員明確開啟。

常見陷阱:會建立 PR 的自動化很常見,容易以為這是預設能力;它必須手動開啟。

依據:Disabling or limiting GitHub Actions for your organization

在互動版作答這題

第 52 題(D4-O2)

團隊停用了自管 runner 的自動更新。新版 runner 釋出後,最多多久內必須完成更新,否則 GitHub 不再把 job 排給它?

單選題,選項:

  • 新版釋出後 7 天內
  • 新版釋出後 14 天內
  • 新版釋出後 30 天內
  • 新版釋出後 90 天內
看答案與解析

正確答案:新版釋出後 30 天內

解析:停用自動更新後,必須在新版釋出後 30 天內安裝,否則 GitHub 不再排 job 給它;重大安全更新則會擋住 job 直到更新。

常見陷阱:預設的自動更新是在一週內完成,容易把「一週」和「期限」混為一談;停用後的期限是 30 天。

依據:About self-hosted runners、Self-hosted runners reference

在互動版作答這題

第 53 題(D4-O2)

job 的 runs-on 指定的標籤沒有任何符合的 runner,job 一直留在佇列。多久後會失敗?

單選題,選項:

  • 排隊超過 24 小時後自動取消
  • 排隊超過 60 秒後就自動取消
  • 排隊超過 6 小時後就自動取消
  • 排隊超過 72 小時後自動取消
看答案與解析

正確答案:排隊超過 24 小時後自動取消

解析:沒有符合的 runner 時 job 留在佇列,排隊超過 24 小時就會失敗;60 秒是 runner 沒有接起 job 時重新排隊的時間。

常見陷阱:兩個時間都與佇列有關:60 秒是重新排隊,24 小時才是失敗;6 小時則是 GitHub 代管 runner 的 job 執行上限。

依據:Self-hosted runners reference

在互動版作答這題

第 54 題(D4-O2)

組織使用 IP 允許清單,新註冊的自管 runner 連不上 GitHub。除了確認出站 443 之外,還需要做什麼?

單選題,選項:

  • 把 runner 重新註冊到企業層級而不是組織
  • 在 runner 設定檔加入 GitHub 的 IP 範圍
  • 把 runner 的標籤改成 self-hosted 才能通過清單檢查
  • 把自管 runner 的 IP 位址加進允許清單
看答案與解析

正確答案:把自管 runner 的 IP 位址加進允許清單

解析:使用 IP 允許清單時,必須把自管 runner 的 IP 位址加進清單;runner 還需要能對外建立 443 的 HTTPS 連線並連到必要網域。

常見陷阱:常見的想法是把 GitHub 的位址加進 runner 端;實際上被擋的是 runner 這一端的來源 IP。

依據:Self-hosted runners reference

在互動版作答這題

第 55 題(D4-O2)

組織預設群組內的自管 runner,預設可以被哪些 repository 使用?

單選題,選項:

  • 組織內所有公開與私有的 repository 皆可使用
  • 只有私有 repository,但管理員可以覆寫設定
  • 只有組織內被明確選取的 repository,預設為零個
  • 所有 repository,但公開 repository 的 fork 除外
看答案與解析

正確答案:只有私有 repository,但管理員可以覆寫設定

解析:預設只有私有 repository 能使用群組內的 runner,可以覆寫;官方提醒自管 runner 最好只給私有 repository,因為 fork 的 PR 可能執行危險的程式碼。

常見陷阱:把 runner 加進群組不代表所有 repository 都能用;預設的預設就是只開給私有 repository。

依據:Manage access to self-hosted runners

在互動版作答這題

第 56 題(D4-O2)

關於以 --ephemeral 註冊的自管 runner,下列哪些正確?(選 2 項)

複選題,選項:

  • GitHub 會在每個 job 後自動清理機器上的檔案
  • 註冊後執行完一個 job 就會取消註冊
  • 它的日誌應該轉送到外部的儲存位置保存
  • 適合長時間重複使用,以保存快取與狀態
看答案與解析

正確答案:註冊後執行完一個 job 就會取消註冊;它的日誌應該轉送到外部的儲存位置保存

解析:暫時性 runner 在執行一個 job 後就由 GitHub 取消註冊,清理由你負責,日誌也要轉送到外部儲存。

常見陷阱:「取消註冊」不等於「清理機器」;機器上的狀態與檔案仍需自己處理。

依據:About self-hosted runners、Secure use reference

在互動版作答這題

第 57 題(D4-O2)

要為 larger runners 設定靜態 IP 位址範圍,下列哪一項正確?

單選題,選項:

  • Team 與 Enterprise Cloud 皆可,支援所有系統
  • 需要 Enterprise Cloud,且包含 macOS 在內皆支援
  • 需要 Enterprise Cloud,但 macOS 不支援
  • 需要 Team 方案,只能在組織層級啟用
看答案與解析

正確答案:需要 Enterprise Cloud,但 macOS 不支援

解析:靜態 IP 範圍需要 GitHub Enterprise Cloud,macOS 的 larger runners 不支援;要在每個 runner 上個別啟用,預設最多 10 個池。

常見陷阱:靜態 IP 不是 larger runners 的預設功能,方案與作業系統都有條件。

依據:Manage larger runners

在互動版作答這題

第 58 題(D4-O3)

同名的 API_KEY 同時存在於組織、repository 與 production 環境。job 指定 environment: production,環境設了必要審核者。實際會怎樣?

單選題,選項:

  • 核准後才使用環境的 secret,核准前完全拿不到
  • 使用組織的 secret,環境只負責審核不提供值
  • 使用 repository 的 secret,完全忽略環境的設定
  • 核准後用環境的 secret,核准前可用同名 repository 值
看答案與解析

正確答案:核准後才使用環境的 secret,核准前完全拿不到

解析:環境 secret 優先於同名的 repository 或組織 secret;若環境啟用必要審核者,job 在核准之前無法存取環境 secret。

常見陷阱:「範圍越大越優先」是常見直覺;同名時越具體的層級優先,而且環境還多一道核准關卡。

依據:About secrets、Reusing workflow

在互動版作答這題

第 59 題(D4-O3)

你寫了 if: secrets.TOKEN != '',工作流程無效。應該怎麼改?

單選題,選項:

  • 改用 format() 函式包住 secrets.TOKEN 再比較
  • 把 secret 改存成 variable 後直接比較
  • 把比較改寫在 steps.if 而不是 jobs.if
  • 放進 job 層級環境變數,再用 env 判斷
看答案與解析

正確答案:放進 job 層級環境變數,再用 env 判斷

解析:secrets 不能直接用在 if 條件;先把它放進 job 層級的環境變數,再用 env context 判斷。

常見陷阱:改存 variable 會把機密暴露在不會遮蔽的位置;問題是 context 的可用範圍,不是引號。

依據:Using secrets in GitHub Actions、Contexts

在互動版作答這題

第 60 題(D4-O3)

由 Dependabot 事件觸發的工作流程,無法讀取 repository 的一般 secrets。

是非題:判斷敘述是否正確。

看答案與解析

正確答案:正確

解析:Dependabot 事件觸發的工作流程拿不到一般 secrets;從 fork 觸發的工作流程除了 GITHUB_TOKEN 之外,也不會傳遞 secrets。

常見陷阱:Dependabot 的 PR 看起來像 repository 內部的 PR,容易以為它和一般分支的工作流程一樣能讀 secrets。

依據:Using secrets in GitHub Actions

在互動版作答這題

第 61 題(D4-O3)

要用 REST API 建立或更新 repository secret,值該如何處理?

單選題,選項:

  • 以 Base64 編碼後直接放進 encrypted_value
  • 用 LibSodium 與公鑰加密,並帶對應的 key_id
  • 以 SHA256 雜湊後放進 encrypted_value
  • 用組織的 SSH 金鑰做 RSA 加密後放進 encrypted_value
看答案與解析

正確答案:用 LibSodium 與公鑰加密,並帶對應的 key_id

解析:必須先取得該範圍的公鑰與 key_id,用 LibSodium 以公鑰加密 secret 的值,再用 PUT 送出 encrypted_value 與 key_id。

常見陷阱:Base64 只是編碼不是加密,雜湊也無法還原;API 要的是用公鑰加密的結果。

依據:REST: secrets

在互動版作答這題

第 62 題(D4-O3)

GitHub Free 的組織設定了組織層級的 secrets。組織內的私有 repository 能使用它們嗎?

單選題,選項:

  • 可以,只要存取政策選擇所有 repository
  • 可以,但只限預設分支上執行的工作流程
  • 不行,Free 的組織 secrets 不能給私有 repository 用
  • 不行,但同層級的 variables 可以被私有 repository 使用
看答案與解析

正確答案:不行,Free 的組織 secrets 不能給私有 repository 用

解析:GitHub Free 的組織層級 secrets 與 variables 不能被私有 repository 存取;要讓私有 repository 使用,需要更高的方案。

常見陷阱:存取政策設成所有 repository 看似涵蓋全部,但方案限制先於政策。

依據:About secrets、Use variables

在互動版作答這題