共用方式為


針對程式代碼掃描進行疑難解答

一般而言,如果您在 CodeQL 執行時遇到錯誤,CodeQL CLI 會報告其執行的每個命令狀態做為結束代碼。 結束代碼會提供後續命令或依賴 CodeQL CLI 之其他工具的資訊。 如需結束代碼詳細數據的詳細資訊,請參閱 結束代碼

先決條件

類別 需求
許可 - 若要檢視存放庫的所有警示摘要:存放庫的參與者 許可權。
- 若要關閉進階安全性中的警示:專案管理員 許可權。
- 若要管理進階安全性中的許可權:必須是 專案集合系統管理員 群組的成員或擁有 進階安全性: 管理設定 許可權設為 允許

如需進階安全性許可權的詳細資訊,請參閱 管理進階安全性許可權

錯誤:'database finalize' CodeQL 命令 (32)

此錯誤表示完成 CodeQL 資料庫建立時發生問題,可能是因為擷取錯誤或缺少建置步驟。

疑難排解步驟:

  1. 確認程序代碼存在且已編譯
    • 針對已編譯的語言,請確認建置程式正在編譯程序代碼,並在和工作AdvancedSecurity-Codeql-Init之間AdvancedSecurity-Codeql-Analyze發生。 您可以在指定組建命令中找到常見的建置命令和必要旗標(例如乾淨的無快取/無精靈)。
    • 針對解譯的語言,請確認專案中指定語言有一些原始程式碼。
  2. 檢查擷取錯誤
    • 確認擷取錯誤是否會影響CodeQL資料庫的健全狀況。
    • 檢閱記錄檔中是否有擷取錯誤和警告,以評估整體資料庫健康情況。
  3. 調查壓倒性錯誤
    • 如果大部分檔案遇到擷取器錯誤,請進一步調查以瞭解擷取不當的根本原因。

錯誤:自動建置文稿 (1)

此錯誤描述自動建置失敗,並建議程式代碼掃描設定或設定的問題。

疑難排解步驟:

  • 設定建置步驟
    • 拿掉 AutoBuild 步驟,並改為在管線中設定已編譯語言的特定建置步驟。
    • 請參閱設定 Azure DevOps 的 GitHub 進階安全性中提供的設定指導方針。

錯誤:代理程式工具快取中找不到 CodeQL 目錄

此錯誤表示為自我裝載代理程式安裝CodeQL時發生問題。

疑難排解步驟:

錯誤:未設定語言管線變數

嘗試執行 CodeQL 但未設定管線變數來指定要掃描哪些語言時,就會發生此錯誤。

疑難排解步驟:

  • 設定語言管線變數
    • 請確定已正確設定語言管線變數。 請參閱設定 Azure DevOps 的 GitHub 進階安全性中提供的設定指導方針。
    • 支援的語言包括csharp、、cppgojavajavascript、、pythonruby、 和 swift

CodeQL 不會傳回任何結果

本節提供 CodeQL 分析不會產生任何結果的情況指引。

疑難排解步驟:

  1. 檢查偵測到的弱點
    • 請考慮您的程式代碼可能沒有任何弱點的可能性。 如果預期但未偵測到弱點,請繼續進行進一步驗證。
  2. 檢閱查詢套件組態
  3. 調整檢視結果的許可權
    • 請確定至少在參與者層級授與適當的許可權,才能存取分析結果。 如需詳細資訊,請參閱 進階安全性許可權

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。 或者,您可以手動實作下列步驟:

  1. GitHub 挑選最新的 CodeQL 版本套件組合。
  2. 將套件組合下載並解壓縮到代理程式工具目錄內的下列目錄,通常位於 底下 _work/_tool./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/。 使用的目前版本 v2.23.5,資料夾名稱會標題為 ./CodeQL/0.0.0-v2.23.5/x64/。 深入瞭解 代理程式工具目錄
  3. 建立標題在 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']) ]

如需詳細資訊,請檢查 版本資訊