1617 字
8 分鐘

actions/checkout@v5 出現 Node 24 錯誤怎麼辦?先更新 GitHub Actions runner

把 workflow 的 actions/checkout 從 v4 改成 v5 後,如果 job 在 checkout 階段就出現 Node 24 或 runner 版本錯誤,先不要修改 setup-node。官方 checkout v5 已改用 Node 24,最低需要 GitHub Actions runner v2.327.1;真正需要更新的是承載 action 的 runner。

直接答案是:先從錯誤訊息確認 job 使用哪一種 runner,再把 self-hosted runner 更新到符合最低版本,重跑 checkout 與完整 workflow。只有在 runner 受外部維運、短時間不能更新時,才把 checkout 暫時釘回 v4 作為回復措施;這不是用 Node setup step 取代 runner 更新。

先從錯誤訊息分流#

先在 workflow 與 job 記錄中確認三件事:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
Terminal window
rg -n 'runs-on:|actions/checkout@|setup-node|container:|act' \
.github/workflows .actrc Makefile package.json

接著依 runs-on 分流:

執行環境先檢查什麼常見處理
GitHub-hosted runnerjob log 顯示的 runner image 與 Runner version先確認是否是舊 image、暫時性服務問題或 workflow 實際跑到 self-hosted label
self-hosted runnerrunner application 版本與自動更新設定更新 runner application,並確認服務重新啟動後讀到新版本
act 或其他本機 runner本機 runner image、act 版本與 workflow 模擬差異用受支援的本機映像更新,並以 GitHub-hosted 或實際 self-hosted job 做最後驗證
container jobcontainer 內工具版本與 host runner 版本先修 host runner;container 內安裝 Node 不會改變 Actions runner 本身

不要把 runs-on: self-hosted、label、container 與 workflow trigger 混在一起看。很多「我明明使用 ubuntu-latest」的案例,實際上是另一個 job、reusable workflow 或 matrix 分支用了舊的 self-hosted label。

hosted runner 和 self-hosted runner 要分開看#

GitHub-hosted runner 由 GitHub 管理 image 與 runner application;你能做的是確認 job log、image label 與官方服務狀態,並在短暫異常時重試或改用已支援的 label。不要在 workflow 中用 npm install 期待修改託管 runner 的核心版本。

self-hosted runner 則是團隊自己管理。官方文件說明,runner 預設會自動更新;若啟用了 --disableupdate,就必須由管理者手動更新。新的 Actions 功能可能要求較新的 runner,版本過舊時 job 可能排隊或在 action 啟動前失敗。

先在 GitHub repository 或 organization 的 Runners 頁面確認:

  • 失敗 job 使用的 runner 名稱與 labels。
  • log 顯示的 runner application 版本是否低於 v2.327.1
  • runner 是否被設成 --disableupdate,或服務帳號無法寫入更新目錄。
  • 更新後 runner 是否真的離線、重新啟動,再以新版本上線。

如果需要逐台處理,可參考 self-hosted runner 更新清單;不要只在 workflow 中增加一個 Node 安裝 step,然後把相同的舊 runner label 留給所有 job。

更新 self-hosted runner 的正確範圍#

更新的目標是 runner application 與它的服務生命週期,不是專案依賴。建議順序是:

  1. 保存失敗 job URL、runner name、runner version、OS/架構與 workflow commit。
  2. 從 GitHub Runners 設定或官方 runner release 取得符合平台的版本,依團隊維運流程替換 runner。
  3. 重新啟動 runner service,確認它重新註冊且 log 顯示新版本。
  4. 用一個只包含 checkout 的最小 job 測試,再重跑完整 matrix。
  5. 檢查其他 uses: action 是否也有新的最低 runner 要求。

更新自託管 runner 後,還要確認它能存取 action download、GitHub API、checkout 需要的 repository 與 credential。若 checkout 通過但後續 package install 失敗,那是另一個網路、權限或 Node runtime 問題,不要把所有錯誤都歸在 runner 版本。

為什麼 setup-node 不能修好 runner 錯誤#

actions/setup-node 是 workflow 中的一個 action step;它會在 runner application 已經啟動、並且能夠執行 action 之後,替後續腳本準備 Node.js。actions/checkout@v5 的 Node 24 runtime 則由 Actions runner 負責載入,發生錯誤的時間點可能早於 setup-node

因此以下順序不能解決 runner 太舊:

steps:
- uses: actions/setup-node@v4
with:
node-version: 22
- uses: actions/checkout@v5

這段設定可以選擇專案腳本使用的 Node 版本,但不能把 runner application 升級,也不能讓舊 runner 執行它不支援的 action runtime。應先修 runner,再依專案需求設定 setup-node

暫時回退時要保留什麼證據#

如果 self-hosted runner 由外部團隊管理、更新有變更窗口,可以把 checkout 暫時固定到仍可用的 v4,讓 CI 恢復,但要同時留下:

  • 原始 Node 24/runner 版本錯誤與完整 job URL。
  • 受影響的 runner labels、管理者與預計更新時間。
  • 回退的 workflow commit,最好依團隊政策使用 tag 或 commit SHA pinning。
  • 回退期間是否有安全掃描、權限或其他 action runtime 差異。

回退只處理事故期間的可用性,不代表 v5 需求消失。runner 更新後要再切回 v5,並刪除臨時 workaround;若團隊的安全政策不允許浮動 tag,回退與升級都應使用已審查的 SHA,而不是在失敗時任意改成另一個版本。

另外,actions/checkout 的 Node 24 runtime 與既有的 pull_request_target 權限風險是不同問題。若 workflow 同時使用該 trigger,仍要依 pull_request_target 的權限與 checkout 安全檢查 另外審查,不要把 runner 更新當成權限修正。

完成條件:action、runner 與 job 都通過#

修復完成後,至少確認:

  1. 失敗 job 實際使用的 runner application 已達 v2.327.1 或更新版本。
  2. actions/checkout@v5 在受影響的 runner、OS 與 container 組合中可以啟動。
  3. setup-node 只負責專案需要的 Node 版本,沒有被當成 runner 更新手段。
  4. self-hosted runner 的服務在重啟、斷線與自動更新後仍會重新註冊。
  5. 完整 workflow 的 cache、submodule、LFS、private repository 與後續 build 都通過。

最後保留一份 runner version 與 workflow commit 的對照,下一次 action major 升級時就能先在 canary runner 驗證,不必等 production job 先失敗才知道 runtime 有最低版本門檻。

常見問題#

Q: 更新 Node.js 到 24 就能修好 actions/checkout@v5 嗎?#

A: 不一定,而且通常不是正確方向。checkout v5 的 Node 24 是 action runtime,由 Actions runner 載入;setup-node 只影響後續工作步驟使用的 Node。先更新 runner application 到官方要求的最低版本。

Q: GitHub-hosted runner 也需要我手動安裝 runner v2.327.1 嗎?#

A: GitHub-hosted runner 的 application 與 image 由 GitHub 管理。先從 job log 確認實際 runner、image 與版本;若 workflow 實際使用的是 self-hosted label,則要由你或管理者更新自託管 runner。

Q: 可以一直把 checkout 固定在 v4 嗎?#

A: 可以把 v4 當短期回退,但不應把它當成永久忽略 runner 更新的方案。記錄失敗證據、更新責任與期限,runner 達標後再以 v5 重跑完整 workflow。

參考資料:

actions/checkout:Checkout v5

actions/checkout Release:v5.0.0

GitHub Docs:Self-hosted runners

GitHub Docs:Monitor and troubleshoot self-hosted runners

actions/checkout@v5 出現 Node 24 錯誤怎麼辦?先更新 GitHub Actions runner
https://laplusda.com/posts/github-actions-checkout-v5-node24/
作者
Zero
發佈於
2026-08-14
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。