1340 字
7 分鐘

GitHub Code Scanning default setup 怎麼共用 CodeQL 設定檔?

GitHub Code Scanning 的 default setup 適合先快速開啟掃描,但組織一大,就會遇到「每個 repository 都要排除相同的 generated/ 或 vendor/ 路徑」的維護問題。GitHub 在 2026 年 8 月 4 日讓 default setup 可以套用自訂 CodeQL 設定檔,透過 github-codeql-config-file repository property 集中管理這些規則。

這個功能的價值是保留 default setup 的低維護方式,同時補上額外 queries、排除路徑或 threat model。它不是要求你在每個 repository 重新寫一份 Actions workflow,也不是把 default setup 直接轉成 advanced setup。

github-codeql-config-file 會怎麼合併設定#

GitHub 文件的描述是:自訂設定檔會和 default setup 自動產生的內建設定合併。你可以在設定檔中加入額外 queries 或 paths-ignore,而不必為了客製化就放棄 default setup。

一份可以放在中央 repository 的設定檔,例如:

name: "Organization CodeQL configuration"
queries:
- uses: security-extended
paths-ignore:
- "generated/**"
- "vendor/**"

這個檔案應該只放團隊確定要共用的規則。先不要把某個 repository 特有的路徑、暫時性 false positive 或實驗 query 直接塞進組織層級,否則排錯時很難知道問題來自中央設定還是專案本身。

用 repository property 指向設定檔#

github-codeql-config-file 是 repository property,不是 codeql.yml 自動偵測的特殊檔名。GitHub 文件提供的遠端格式是:

remote=octo-org/security-config@main:codeql.yml

也可以先用被分析 repository 內的本地路徑,或在單一 repository 測試遠端設定。實際 rollout 前先確認三件事:

  • property 已經在組織中建立,且值是 GitHub Code Scanning 接受的本地或遠端路徑。
  • 設定檔所在的 branch、路徑與 repository 可被正確讀取。
  • 這個 repository 已經啟用適用的 Code Scanning setup;property 本身不會替你開啟掃描。

如果中央設定檔放在另一個 private repository,GitHub 要求另外設定 Git Source private registry,讓 security features 能讀到它。不要用工作流程裡的長期 token 來繞過這個存取邊界。

先測一個 repository,再推到整個組織#

GitHub 官方建議的 rollout 順序是先測試,再設定 organization-wide default。可以照這個流程做:

  1. 在中央 repository 建立並 review CodeQL 設定檔。
  2. 為組織建立 github-codeql-config-file property,但先不要立即替所有 repository 設定預設值。
  3. 只在一個測試 repository 設定 local 或 remote value,等待下一次 Code Scanning 執行。
  4. 對照新增的 findings、被排除的路徑與原本的語言/query 結果。
  5. 確認結果可接受後,再把 property 的 default value 設成中央檔案位置。

要特別留意 repository 的明確設定:已有 explicit github-codeql-config-file 值的 repository,會繼續使用自己的值,不會被 organization-wide default 覆蓋。這是 rollout 後最容易出現「為什麼某個 repository 沒跟著改」的原因。

default setup 與 advanced setup 怎麼選#

需求適合的方式維護重點
先開啟標準 CodeQL 掃描default setup由 GitHub 管理主要 workflow 與版本
多個 repository 共用排除路徑與 queriesdefault setup + repository property中央檔案、property scope 與測試 repository
每個 repository 都有不同的工作流程、觸發條件或 runneradvanced setup自己維護 Actions workflow、版本與權限

如果真正的需求是「所有 repository 都用同一套自訂 query」,先嘗試中央設定檔;如果需求已經包含特殊 trigger、runner、permissions 或建置流程,才重新評估 advanced setup。不要把「需要排除一個資料夾」直接升級成整套 workflow 維護。

上線後的驗證清單#

  • 先保存一個 repository 在套用 property 前的 scan 結果,作為對照。
  • 檢查設定檔的 queriespathspaths-ignore 是否真的符合每個語言與專案結構。
  • 確認 private 設定檔的 Git Source private registry 已完成,且沒有把 token 放進 workflow。
  • 列出有 explicit property 值的例外 repository,避免以為組織 rollout 已涵蓋全部。
  • 把 CodeQL findings 與 GitHub Code Quality 的導入與成本 分開追蹤;前者是掃描設定,後者還包含 active committer、AI credits 與 rulesets。

這次更新提供的是一個中間層:你可以維持 default setup,卻不用接受所有 repository 都只能使用相同預設值。先用單一 repository 驗證設定檔和 findings,再把 property 推廣到組織,會比一次修改所有掃描流程更容易回溯。

常見問題#

Q: 使用 github-codeql-config-file 後,還需要自己維護 CodeQL Actions workflow 嗎?#

A: 如果你的需求只是把自訂 CodeQL 設定合併到 default setup,不需要因此在每個 repository 新增一份 advanced setup workflow。GitHub 會把設定檔和 default setup 自動產生的設定合併。若你還需要自訂 trigger、runner、permissions 或建置流程,才要另外評估 advanced setup 的維護成本。

Q: 組織設定了 default value,為什麼某些 repository 沒套用?#

A: GitHub 文件指出,已經設定 explicit github-codeql-config-file 值的 repository 會繼續使用自己的值,而不是 organization-wide default。rollout 後應列出這些例外,確認它們是刻意保留,還是早期測試留下的設定。

Q: 私有 repository 的中央 CodeQL 設定檔可以直接引用嗎?#

A: 可以,但若設定檔位於被分析 repository 以外的 private repository,GitHub 要求設定 Git Source private registry,讓 security features 能存取該檔案。先在一個測試 repository 驗證讀取與掃描結果,再推廣到組織,並避免用長期 token 把這個存取問題藏進 workflow。

參考資料:

GitHub Changelog:Customize code scanning default setup at scale

GitHub Docs:Editing your configuration of default setup

GitHub Docs:Repository properties for code scanning

GitHub Code Scanning default setup 怎麼共用 CodeQL 設定檔?
https://laplusda.com/posts/github-code-scanning-default-setup-config/
作者
Zero
發佈於
2026-08-06
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

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