关于使用容器化构建的 code scanning
如果为编译语言配置 code scanning,并且在容器化环境中生成代码,则分析可能会失败,并返回错误消息“在生成过程中没有看到源代码”。 这表明 CodeQL 在代码编译过程中无法监视代码。
您必须在构建代码的容器中运行 CodeQL。 无论你使用的是 CodeQL CLI 还是 GitHub Actions,这都适用。 有关 CodeQL CLI 的详细信息,请参阅“在现有 CI 系统上使用代码扫描”。 如果您使用 GitHub Actions,请配置工作流程以在同一容器中运行所有操作。 有关详细信息,请参阅“示例工作流”。
Note
CodeQL CLI 当前与非 glibc Linux 发行版不兼容,例如(基于 musl 的)Alpine Linux。
CodeQL code scanning 的依赖项
如果您使用的容器缺少某些依赖项(例如,Git 必须安装并添加到 PATH 变量),您可能难以运行 code scanning。 如果遇到依赖项问题,请查看通常包含在 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@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- name: Build
run: |
./configure
make
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3