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

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

D2「使用與疑難排解工作流程」14 題原創模擬題,附正確答案、解析與常見陷阱。選項順序在互動版會隨機排列。

第 18 題(D2-O1)

在舊的執行上按 Re-run failed jobs,重跑使用的 GITHUB_SHA 與 GITHUB_REF,與原本那次執行相同。

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

看答案與解析

正確答案:正確

解析:重跑沿用原事件的 GITHUB_SHA 與 GITHUB_REF,並以最初觸發者的權限執行,所以不會拿到之後推送的新 commit。

常見陷阱:修好程式碼後直覺會想「重跑一次看看」;重跑驗證不到新程式碼,要看新推送所觸發的新執行。

依據:Re-run workflows and jobs

在互動版作答這題

第 19 題(D2-O1)

關於重新執行工作流程的限制,下列哪一項正確?

單選題,選項:

  • 初次執行後 30 天內,最多重跑 20 次
  • 初次執行後 90 天內,最多重跑 50 次
  • 初次執行後 60 天內,最多重跑 10 次
  • 初次執行後 30 天內,最多重跑 50 次
看答案與解析

正確答案:初次執行後 30 天內,最多重跑 50 次

解析:官方限制是初次執行後 30 天內可以重跑,一次執行最多重跑 50 次,完整重跑與部分重跑都計入。

常見陷阱:天數與次數各有一個容易記混的數字;兩個限制要一起記,只對一個仍會選錯。

依據:Re-run workflows and jobs

在互動版作答這題

第 20 題(D2-O1)

要讓下載的日誌封存檔多出 runner-diagnostic-logs 資料夾,應該啟用哪一個設定?

單選題,選項:

  • ACTIONS_STEP_DEBUG 設為 true,輸出更多步驟除錯事件
  • ACTIONS_RUNNER_DEBUG 設為 true,啟用 runner 診斷
  • ACTIONS_RUNNER_LOG 設為 verbose,保留完整日誌
  • ACTIONS_DIAGNOSTICS 設為 true,產生診斷資料夾
看答案與解析

正確答案:ACTIONS_RUNNER_DEBUG 設為 true,啟用 runner 診斷

解析:ACTIONS_RUNNER_DEBUG 啟用 runner 診斷記錄,封存檔會多出 runner-diagnostic-logs,內含 runner 與 worker 程序記錄;ACTIONS_STEP_DEBUG 則讓步驟日誌更詳細。

常見陷阱:兩個名稱都有 DEBUG,容易互換;STEP 管步驟日誌與 ::debug:: 訊息,RUNNER 管 runner 本身的診斷。

依據:Enable debug logging

在互動版作答這題

第 21 題(D2-O1)

同一個 repository 同時把 ACTIONS_STEP_DEBUG 建成 secret(值為 false)與 variable(值為 true)。哪一個會生效?

單選題,選項:

  • variable 生效,值為 true,因為範圍較明確
  • secret 生效,值為 false,secret 的優先順序較高
  • 兩者合併,只要有一個為 true 就會啟用該功能
  • 較晚建立的那一個生效,與類型無關
看答案與解析

正確答案:secret 生效,值為 false,secret 的優先順序較高

解析:兩者都可以建成 secret 或 variable;同時存在時 secret 優先,所以實際為 false。

常見陷阱:一般會以為「範圍小的覆蓋範圍大的」或「後建立的覆蓋先建立的」;除錯記錄這兩個設定是以類型決定優先。

依據:Enable debug logging

在互動版作答這題

第 22 題(D2-O1)

重新執行時勾選 Enable debug logging,會同時啟用 runner 診斷記錄與步驟除錯記錄。

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

看答案與解析

正確答案:正確

解析:重新執行時的 Enable debug logging(CLI 為 --debug)會同時啟用兩者,不必改 secret 或 variable;任何能執行該工作流程的人都能這樣做。

常見陷阱:不少人以為只有 repository 寫入權限的人才能開除錯記錄;重新執行的勾選項不需要先建立設定。

依據:Enable debug logging

在互動版作答這題

第 23 題(D2-O1)

在 job 日誌頁用 Search logs 搜尋一段你確定存在的文字,卻沒有結果。最可能的原因是什麼?

單選題,選項:

  • 那個步驟還沒展開,搜尋只涵蓋已展開的步驟
  • 搜尋只涵蓋失敗的步驟,成功的步驟被排除
  • 搜尋只比對步驟名稱,不比對日誌內容
  • 日誌超過保留期的部分已被清除,所以搜尋不到
看答案與解析

正確答案:那個步驟還沒展開,搜尋只涵蓋已展開的步驟

解析:Search logs 只搜尋已展開的步驟;要找的步驟要先展開。需要完整日誌時可以下載 log archive。

常見陷阱:搜尋框在頁面上,看起來像是全文搜尋;實際範圍取決於哪些步驟已展開。

依據:Use workflow run logs

在互動版作答這題

第 24 題(D2-O1)

在終端機只想看某次執行中失敗的步驟日誌,該用哪個指令?

單選題,選項:

  • gh run rerun RUN_ID --failed 這個指令
  • gh run list --status failure --log 這個指令
  • gh run view RUN_ID --log-failed
  • gh run view RUN_ID --log --failed 這個指令
看答案與解析

正確答案:gh run view RUN_ID --log-failed

解析:gh run view RUN_ID --log-failed 只顯示失敗步驟的日誌;--log 顯示整次執行,--job 搭配 --log 看單一 job。

常見陷阱:gh run rerun 是重新執行,不是查看日誌;名稱裡有 failed 不代表它會輸出失敗的日誌。

依據:Use workflow run logs

在互動版作答這題

第 25 題(D2-O2)

呼叫 REST API 下載成品,回應是 302 與 Location 標頭。這個下載網址的有效時間是多久?

單選題,選項:

  • 約 10 分鐘,在工作流程結束前都有效
  • 約 1 小時,足夠排程後再下載
  • 直到該成品的保留期結束為止
  • 只有 1 分鐘,需要立刻跟著抓
看答案與解析

正確答案:只有 1 分鐘,需要立刻跟著抓

解析:成品下載與日誌下載的 302 導向網址都只有 1 分鐘有效,每次下載都應重新呼叫端點取得新網址。

常見陷阱:存下網址稍後再用是自然的做法;這個網址是短效的,隔一陣子就會失效。

依據:REST: artifacts

在互動版作答這題

第 26 題(D2-O2)

關於 REST API 下載成品端點,下列哪些正確?(選 2 項)

複選題,選項:

  • 回應是 302,網址在 Location 標頭
  • archive_format 參數只能指定為 zip
  • 回應的 Location 網址有效約 1 小時
  • 可用 archive_format=tar 下載封存檔
看答案與解析

正確答案:回應是 302,網址在 Location 標頭;archive_format 參數只能指定為 zip

解析:archive_format 只能是 zip;回應是 302 重新導向,網址在 Location 標頭,且只有 1 分鐘有效。

常見陷阱:「重新導向」與「直接回內容」是兩種不同行為;這個端點要先跟著導向才拿得到檔案。

依據:REST: artifacts

在互動版作答這題

第 27 題(D2-O2)

用 DELETE 刪除一次工作流程執行時,那次執行的成品會怎樣?

單選題,選項:

  • 一併從儲存空間中刪除,不另保留
  • 保留到各自的保留期結束才清除
  • 標記為過期,但仍可下載 30 天
  • 移到 repository 層級另外保存
看答案與解析

正確答案:一併從儲存空間中刪除,不另保留

解析:刪除一次執行時,它的成品也會一起從儲存空間刪除;只想留下日誌就改刪個別成品。

常見陷阱:日誌與成品是分開管理的兩種資料,容易以為刪除動作不會連動;實際上刪整次執行會一併清除成品。

依據:REST: workflow runs、Remove workflow artifacts

在互動版作答這題

第 28 題(D2-O2)

actions/download-artifact 預設可以直接下載其他工作流程執行所上傳的成品,不需額外設定。

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

看答案與解析

正確答案:錯誤

解析:預設只能取得同一次執行稍早上傳的成品;跨執行下載要提供 token 與執行編號。

常見陷阱:成品在 repository 裡看得到,容易以為任何執行都能取用;跨執行取用要明確指定來源。

依據:Store and share data

在互動版作答這題

第 29 題(D2-O3)

複合 action 需要用到一個 secret,卻無法從 secrets context 讀到。應該怎麼做?

單選題,選項:

  • 在 action.yml 的 runs 區塊宣告 secrets 欄位
  • 在步驟的 env 寫入 secrets.NAME,action 內就自動可讀
  • 由呼叫它的工作流程把 secret 當作 input 傳入
  • 把 action 發佈到 Marketplace,secrets 就自動可用
看答案與解析

正確答案:由呼叫它的工作流程把 secret 當作 input 傳入

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

常見陷阱:可重用工作流程可以用 secrets,複合 action 不行;兩種重用機制常被混為一談。

依據:Reusing workflow configurations (concepts)、Create a composite action

在互動版作答這題

第 30 題(D2-O3)

要讓組織成員在 New workflow 頁面挑選範本,每個範本需要放在哪裡、包含哪些檔案?

單選題,選項:

  • 組織 .github repo 的 workflow-templates 目錄,含工作流程檔與同名 .properties.json
  • 組織 .github repo 的 workflow-templates 目錄,只需放工作流程檔即可
  • 組織 .github repo 的 .github/workflows 目錄,檔名加上 template- 前綴
  • 各 repository 的 .github/workflow-templates 目錄,並附 template.json
看答案與解析

正確答案:組織 .github repo 的 workflow-templates 目錄,含工作流程檔與同名 .properties.json

解析:範本放在組織 .github repository 的 workflow-templates 目錄;每個範本需要工作流程檔,以及同名、副檔名為 .properties.json 的中繼資料檔(name 與 description 必填)。

常見陷阱:放 .github/workflows 的檔案是會被執行的工作流程,不是範本;範本要放在 workflow-templates,並附中繼資料檔。

依據:Use workflow templates、Create workflow templates

在互動版作答這題

第 31 題(D2-O3)

對一個正在執行的工作流程按 Disable workflow,進行中的執行會怎樣?

單選題,選項:

  • 會在目前的 job 結束後停止後續的 job
  • 不會被取消,但停用期間無法重新執行
  • 不會被取消,且停用期間仍可重新執行
  • 會被暫停,重新啟用後從中斷處接續
看答案與解析

正確答案:不會被取消,但停用期間無法重新執行

解析:停用只是讓工作流程不再觸發,不會取消進行中的執行;停用期間也不能重新執行那些執行,要先啟用。

常見陷阱:停用不等於取消,也不等於刪除;檔案保留、之後可以啟用,與刪除檔案是兩回事。

依據:Disable and enable workflows

在互動版作答這題