跳至主要内容

在容器中运行 CodeQL 代码扫描

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

谁可以使用此功能?

以下仓库类型可使用代码扫描

  • GitHub.com 上的公共仓库
  • 在 GitHub Team、GitHub Enterprise Cloud 或 GitHub Enterprise Server 上的组织拥有的仓库,已启用 GitHub 代码安全

有关使用容器化构建的代码扫描

如果您正在为编译型语言配置代码扫描,并且在容器化环境中构建代码,分析可能会因错误信息“在构建期间未看到源代码”而失败。这表明 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@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
© . This site is unofficial and not affiliated with GitHub, Inc.