一般而言,如果您在 CodeQL 執行時遇到錯誤,CodeQL CLI 會報告其執行的每個命令狀態做為結束代碼。 結束代碼會提供後續命令或依賴 CodeQL CLI 之其他工具的資訊。 如需結束代碼詳細數據的詳細資訊,請參閱 結束代碼。
先決條件
| 類別 | 需求 |
|---|---|
| 許可 | - 若要檢視存放庫的所有警示摘要:存放庫的參與者 許可權。 - 若要關閉進階安全性中的警示:專案管理員 許可權。 - 若要管理進階安全性中的許可權:必須是 專案集合系統管理員 群組的成員或擁有 進階安全性: 管理設定 許可權設為 允許。 |
如需進階安全性許可權的詳細資訊,請參閱 管理進階安全性許可權。
錯誤:'database finalize' CodeQL 命令 (32)
此錯誤表示完成 CodeQL 資料庫建立時發生問題,可能是因為擷取錯誤或缺少建置步驟。
疑難排解步驟:
- 確認程序代碼存在且已編譯
- 針對已編譯的語言,請確認建置程式正在編譯程序代碼,並在和工作
AdvancedSecurity-Codeql-Init之間AdvancedSecurity-Codeql-Analyze發生。 您可以在指定組建命令中找到常見的建置命令和必要旗標(例如乾淨的無快取/無精靈)。 - 針對解譯的語言,請確認專案中指定語言有一些原始程式碼。
- 針對已編譯的語言,請確認建置程式正在編譯程序代碼,並在和工作
- 檢查擷取錯誤
- 確認擷取錯誤是否會影響CodeQL資料庫的健全狀況。
- 檢閱記錄檔中是否有擷取錯誤和警告,以評估整體資料庫健康情況。
- 調查壓倒性錯誤
- 如果大部分檔案遇到擷取器錯誤,請進一步調查以瞭解擷取不當的根本原因。
錯誤:自動建置文稿 (1)
此錯誤描述自動建置失敗,並建議程式代碼掃描設定或設定的問題。
疑難排解步驟:
- 設定建置步驟
- 拿掉 AutoBuild 步驟,並改為在管線中設定已編譯語言的特定建置步驟。
- 請參閱設定 Azure DevOps 的 GitHub 進階安全性中提供的設定指導方針。
錯誤:代理程式工具快取中找不到 CodeQL 目錄
此錯誤表示為自我裝載代理程式安裝CodeQL時發生問題。
疑難排解步驟:
- 請參閱設定 Azure DevOps 的 GitHub 進階安全性中提供的設定指導方針或設定腳本。
錯誤:未設定語言管線變數
嘗試執行 CodeQL 但未設定管線變數來指定要掃描哪些語言時,就會發生此錯誤。
疑難排解步驟:
- 設定語言管線變數
- 請確定已正確設定語言管線變數。 請參閱設定 Azure DevOps 的 GitHub 進階安全性中提供的設定指導方針。
- 支援的語言包括
csharp、、cpp、gojavajavascript、、python、ruby、 和swift。
CodeQL 不會傳回任何結果
本節提供 CodeQL 分析不會產生任何結果的情況指引。
疑難排解步驟:
- 檢查偵測到的弱點
- 請考慮您的程式代碼可能沒有任何弱點的可能性。 如果預期但未偵測到弱點,請繼續進行進一步驗證。
- 檢閱查詢套件組態
- 確認正在使用的查詢套件,並視需要切換至更完整的套件。
- 或者, 可以建立自定義查詢套件 以進行量身打造的分析。
- 調整檢視結果的許可權
- 請確定至少在參與者層級授與適當的許可權,才能存取分析結果。 如需詳細資訊,請參閱 進階安全性許可權。
CodeQL 逾時
如果工作 AdvancedSecurity-Codeql-Analyze@1 正在顯示 This job was abandoned ... we lost contact with the agent ,而您使用的是託管Microsoft代理程式,工作就會達到付費託管代理程式的內建六小時逾時。 您可以改為嘗試在自我裝載的代理程式上執行分析。
程式代碼掃描工作許可權
程式代碼掃描建置工作會使用管線身分識別來呼叫進階安全性 REST API。 根據預設,相同專案中的管線可以存取執行 CodeQL 分析所產生的 SARIF 檔案。 如果從組建服務帳戶中移除這些許可權,或者如果您有自定義設定,例如,裝載於與存放庫不同的專案中的管線,請手動授與這些許可權。
疑難排解步驟:
- 授
Advanced Security: View alerts與和Advanced Security: Manage and dismiss alerts許可權給管線中使用的建置服務帳戶,其中專案範圍的管線為[Project Name] Build Service ([Organization Name]),而集合範圍的管線為Project Collection Build Service ([Organization Name])。
在非預期的存放庫中發佈結果的程式碼掃描
如果您有一個存放庫中的管線定義,而 GitHub 進階安全性所要掃描的原始碼位於另一個存放庫中,則結果可能會處理並提交至不正確的存放庫,併發佈至包含管線定義的存放庫,而不是原始程式碼存放庫。
要啟用預期結果路由,請將管線環境變數 advancedsecurity.publish.repository.infer: true 設定為自工作目錄中推斷出要發佈的存放庫。
trigger:
- main
resources:
repositories:
# PipelineRepo: The repository containing the pipeline definition.
# This is optional and only needed if you plan to reference files or scripts from this repo.
- repository: PipelineRepo
type: git
name: DevOpsPipelineRepo
ref: refs/heads/main
trigger:
- main
# SourceRepo: The repository where scanning and publishing will occur.
- repository: SourceRepo
type: git
name: code-to-analyze-repo
ref: refs/heads/main
trigger:
- main
jobs:
- job: "CodeQLScan"
displayName: "CodeQL Scanning with Inferred Publishing"
variables:
# Enable repository inference
advancedsecurity.publish.repository.infer: true
steps:
# Checkout the SourceRepo
- checkout: SourceRepo
# Initialize CodeQL
- task: AdvancedSecurity-Codeql-Init@1
displayName: "Initialize CodeQL"
inputs:
languages: "python,javascript" # Adjust based on repository languages
# Perform CodeQL analysis
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: "Analyze Code with CodeQL"
將 CodeQL 套件組合手動安裝到自我裝載的代理程式
使用 GitHub 上提供的架構設定文稿,將 CodeQL 套件組合安裝到代理程式工具快取。 這些文稿需要 $AGENT_TOOLSDIRECTORY 將環境變數設定為代理程式上代理程式工具目錄的位置,例如 C:/agent/_work/_tool。 或者,您可以手動實作下列步驟:
- 從 GitHub 挑選最新的 CodeQL 版本套件組合。
- 將套件組合下載並解壓縮到代理程式工具目錄內的下列目錄,通常位於 底下
_work/_tool:./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/。 使用的目前版本v2.23.5,資料夾名稱會標題為./CodeQL/0.0.0-v2.23.5/x64/。 深入瞭解 代理程式工具目錄。 - 建立標題在
x64.complete./CodeQL/0.0.0-[codeql-release-bundle-tag]資料夾內的空白檔案。 使用上述範例,檔案x64.complete的結束檔案路徑應該是./CodeQL/0.0.0-v2.23.5/x64.complete。
如何明確定義存放庫以發佈程式代碼掃描警示?
- 使用管線環境變數
advancedsecurity.publish.repository.infer: true來推斷存放庫從工作目錄中的存放庫發佈。 - 另一個選項是,如果您未明確簽出存放庫或使用別名來簽出您的存放庫,請使用 變數
advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['YourRepositoryAlias']) ]
如需詳細資訊,請檢查 版本資訊。