跳至主要内容

在容器中运行 CodeQL 代码扫描

您可以通过确保所有进程都在同一容器中运行来在容器中运行代码扫描。

谁可以使用此功能?

代码扫描适用于以下存储库类型

  • GitHub.com 上的公共存储库。
  • 启用了 GitHub 高级安全 的 GitHub Enterprise Cloud 上的组织拥有存储库。

关于使用容器化构建进行代码扫描

如果您正在为编译语言配置代码扫描,并且您在容器化环境中构建代码,则分析可能会失败并显示错误消息“在构建过程中未看到任何源代码”。这表示 CodeQL 无法在编译代码时监视您的代码。

您必须在构建代码的容器中运行 CodeQL。这适用于您是否使用 CodeQL CLI 或 GitHub Actions。对于 CodeQL CLI,请参阅“将代码扫描与现有 CI 系统一起使用”以获取更多信息。如果您使用的是 GitHub Actions,请配置您的工作流以在同一容器中运行所有操作。有关更多信息,请参阅“工作流示例”。

注意

CodeQL CLI 当前与非 glibc Linux 发行版(例如基于 musl 的 Alpine Linux)不兼容。

CodeQL 代码扫描的依赖项

如果您使用的容器缺少某些依赖项,则可能难以运行代码扫描(例如,必须安装 Git 并将其添加到 PATH 变量)。如果您遇到依赖项问题,请查看 GitHub 运行器映像上通常包含的软件列表。有关更多信息,请参阅以下位置的版本特定 readme 文件

工作流示例

此示例工作流使用 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