有关使用容器化构建的代码扫描
如果您正在为编译型语言配置代码扫描,并且在容器化环境中构建代码,分析可能会因错误信息“在构建期间未看到源代码”而失败。这表明 CodeQL 未能在代码编译时进行监控。
必须在构建代码的同一容器内运行 CodeQL。无论您使用 CodeQL CLI 还是 GitHub Actions,都必须如此。有关 CodeQL CLI 的更多信息,请参阅 使用现有 CI 系统进行代码扫描。如果您使用 GitHub Actions,请配置工作流以在同一容器中运行所有操作。更多信息,请参阅 示例工作流。
注意
CodeQL CLI 目前不兼容非 glibc 的 Linux 发行版,例如 (基于 musl 的) Alpine Linux。
CodeQL 代码扫描的依赖项
如果您使用的容器缺少某些依赖项(例如,必须安装 Git 并将其加入 PATH 变量),可能会导致代码扫描运行困难。遇到依赖问题时,请查看 GitHub 运行器镜像通常包含的软件清单。更多信息,请参阅这些位置的特定版本 readme 文件。
- Linux: https://github.com/actions/runner-images/tree/main/images/ubuntu
- macOS: https://github.com/actions/runner-images/tree/main/images/macos
- Windows: https://github.com/actions/runner-images/tree/main/images/windows
示例工作流
此示例工作流使用 GitHub Actions 在容器化环境中运行 CodeQL 分析。container.image 的值确定要使用的容器。在本例中,镜像名为 codeql-container,标签为 f0f91db。更多信息,请参阅 GitHub Actions 的工作流语法。
name: "CodeQL"
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '15 5 * * 3'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
strategy:
fail-fast: false
matrix:
language: [java-kotlin]
# Specify the container in which actions will run
container:
image: codeql-container:f0f91db
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
- name: Build
run: |
./configure
make
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4