Skip to main content

在容器中运行 CodeQL 代码扫描

通过确保所有进程都在同一容器中运行,您可以在容器中运行 code scanning。

谁可以使用此功能?

Code scanning 可用于以下存储库类型:

  • GitHub.com 上的公共存储库
  • 启用了 GitHub Advanced Security 的 GitHub Enterprise Cloud 上的组织拥有的存储库

关于使用容器化构建的 code scanning

如果为编译语言配置 code scanning,并且在容器化环境中生成代码,则分析可能会失败,并返回错误消息“在生成过程中没有看到源代码”。 这表明 CodeQL 在代码编译过程中无法监视代码。

您必须在构建代码的容器中运行 CodeQL。 无论你使用的是 CodeQL CLI 还是 GitHub Actions,这都适用。 有关 CodeQL CLI 的详细信息,请参阅“在现有 CI 系统上使用代码扫描”。 如果您使用 GitHub Actions,请配置工作流程以在同一容器中运行所有操作。 有关详细信息,请参阅“示例工作流”。

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

CodeQL code scanning 的依赖项

如果您使用的容器缺少某些依赖项(例如,Git 必须安装并添加到 PATH 变量),您可能难以运行 code scanning。 如果遇到依赖项问题,请查看通常包含在 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