代码扫描疑难解答
通常,如果遇到 CodeQL 执行错误,CodeQL CLI 则会报告它作为退出代码而运行的每个命令的状态。 退出代码可为后续命令或依赖于 CodeQL CLI 的其他工具提供信息。 有关退出代码的详细信息,请参阅退出代码。
错误:'database finalize' CodeQL 命令 (32)
此错误表示完成 CodeQL 数据库创建时出现问题,而这可能源于提取错误或缺少生成步骤。
故障排除步骤:
- 验证代码是否存在并已编译
- 对于已编译的语言,请验证生成流程是否正在编译代码,且正在
AdvancedSecurity-Codeql-Init
与AdvancedSecurity-Codeql-Analyze
任务之间进行。 你可在指定生成命令中找到常见生成命令和所需的标志(例如,“干净且无缓存/无守护程序”)。 - 对于已解释的语言,请确认项目中存在针对指定语言的某些源代码。
- 对于已编译的语言,请验证生成流程是否正在编译代码,且正在
- 检查提取错误
- 验证提取错误是否会影响 CodeQL 数据库的运行状况。
- 查看日志文件,了解提取错误和警告,以便评估总体数据库运行状况。
- 调查严重错误
- 如果大多数文件遇到提取程序错误,则请进一步调查以了解提取不当的根本原因。
错误:自动生成脚本 (1)
此错误描述了某一自动生成故障,并表明代码扫描设置或配置出现问题。
故障排除步骤:
- 配置生成步骤
- 删除“自动生成”步骤,并在管道中为已编译语言配置特定的生成步骤。
- 请参阅配置适用于 Azure DevOps 的 GitHub Advanced Security 中提供的设置准则。
错误:在代理工具缓存中未找到 CodeQL 目录
此错误表示安装适用于自托管代理的 CodeQL 时出现问题。
故障排除步骤:
- 请参阅配置适用于 Azure DevOps 的 GitHub Advanced Security 中提供的设置准则或配置脚本。
错误:未设置语言管道变量
尝试运行 CodeQL 而未设置用于指定要扫描哪些语言的管道变量时,会出现此错误。
故障排除步骤:
- 设置语言管道变量
- 确保正确配置语言管道变量。 请参阅配置适用于 Azure DevOps 的 GitHub Advanced Security 中提供的设置准则。
- 支持的语言包括
csharp
、cpp
、go
、java
、javascript
、python
、ruby
和swift
。
未返回任何结果的 CodeQL
本节提供针对 CodeQL 分析未生成任何结果的情况的相关指导。
故障排除步骤:
- 检查是否存在已检测到的漏洞
- 请考虑代码可能真无漏洞的可能性。 如果预计存在漏洞但未检测到,这请继续进行验证。
- 查看查询套件配置
- 确认正在使用的查询套件,并在必要时考虑切换到更全面的套件。
- 或者,也可创建自定义查询套件以进行定制分析。
- 调整用于查看结果的权限
- 确保已授予适当的权限(至少为参与者级别)以访问分析结果。 有关详细信息,请参阅 Advanced Security 权限。
CodeQL 超时
如果AdvancedSecurity-Codeql-Analyze@1
任务正在显示This job was abandoned ... we lost contact with the agent
,并且你正在使用托管的 Microsoft 代理,则任务将达到付费托管代理的内置 6 小时超时。 你可以尝试对自托管代理运行分析。
代码扫描任务权限
代码扫描生成任务使用管道标识来调用高级安全 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])
。
将 CodeQL 捆绑包手动安装到自托管代理
通过使用 GitHub 上提供的体系结构安装脚本,将 CodeQL 捆绑包安装到代理工具缓存。 这些脚本要求将 $AGENT_TOOLSDIRECTORY
环境变量设置为代理上的代理工具目录的位置,例如 C:/agent/_work/_tool
。 或者,可以手动执行以下步骤:
- 从 GitHub 选择最新的 CodeQL 发布捆绑包。
- 下载捆绑包并将其解压缩到代理工具目录中的以下目录(通常位于
_work/_tool
下):./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/
。 使用最新版本的v2.16.0
,文件夹名称为./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/
。 详细了解代理工具目录。 - 在
./CodeQL/0.0.0-[codeql-release-bundle-tag]
文件夹内创建名为x64.complete
的空文件。 以上面的示例为例,x64.complete
文件的结束文件路径为./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete
。