Skip to main content

在容器中运行 CodeQL 代码扫描

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

谁可以使用此功能?

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

  • GitHub.com 上的公共存储库
  • GitHub Team、GitHub Enterprise Cloud 或 GitHub Enterprise Server 上的组织拥有的存储库,已启用 GitHub Code Security

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

如果你为编译型语言配置 code scanning,并且在容器化环境中构建代码,则分析可能会失败,并显示错误消息“构建期间未看到源代码”。 这表明 CodeQL 无法在编译过程中监控你的代码。

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

注意

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

CodeQLcode scanning 的依赖项

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

示例工作流

注意

本文介绍了此版 CodeQL 的初始发行版中包含的 CodeQL CLI 操作版本和相关 GitHub Enterprise Server 捆绑包中可用的功能。 如果企业使用较新版本的 CodeQL 操作,请参阅本文的 GitHub Enterprise Cloud 版本,了解有关最新功能的信息。 有关使用最新版本的信息,请参阅“为您的设备配置代码扫描”。

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