{"meta":{"title":"在容器中运行 CodeQL 代码扫描","intro":"通过确保所有进程都在同一容器中运行，您可以在容器中运行 code scanning。","product":"安全性和代码质量","breadcrumbs":[{"href":"/zh/code-security","title":"安全性和代码质量"},{"href":"/zh/code-security/tutorials","title":"Tutorials"},{"href":"/zh/code-security/tutorials/customize-code-scanning","title":"自定义代码扫描"},{"href":"/zh/code-security/tutorials/customize-code-scanning/running-codeql-code-scanning-in-a-container","title":"容器中的 Code scanning"}],"documentType":"article"},"body":"# 在容器中运行 CodeQL 代码扫描\n\n通过确保所有进程都在同一容器中运行，您可以在容器中运行 code scanning。\n\n## 关于使用容器化构建的 code scanning\n\n如果为编译语言配置 code scanning，并且在容器化环境中生成代码，则分析可能会失败，并返回错误消息“在生成过程中没有看到源代码”。 这表明 CodeQL 在代码编译过程中无法监视代码。\n\n您必须在构建代码的容器中运行 CodeQL。 无论你使用的是 CodeQL CLI 还是 GitHub Actions，这都适用。 有关 CodeQL CLI 的详细信息，请参阅 [在现有 CI 系统上使用代码扫描](/zh/code-security/code-scanning/integrating-with-code-scanning/using-code-scanning-with-your-existing-ci-system)。 如果您使用 GitHub Actions，请配置工作流程以在同一容器中运行所有操作。 有关详细信息，请参阅[示例工作流](#example-workflow)。\n\n> \\[!NOTE]\n> CodeQL CLI 当前与非 glibc Linux 发行版不兼容，例如（基于 musl 的）Alpine Linux。\n\n## CodeQL code scanning 的依赖项\n\n如果您使用的容器缺少某些依赖项（例如，Git 必须安装并添加到 PATH 变量），您可能难以运行 code scanning。 如果遇到依赖项问题，请查看通常包含在 GitHub 运行器映像中的软件列表。 有关详细信息，请参阅以下位置中特定于版本的 `readme` 文件：\n\n* Linux：<https://github.com/actions/runner-images/tree/main/images/ubuntu>\n* macOS：<https://github.com/actions/runner-images/tree/main/images/macos>\n* Windows： <https://github.com/actions/runner-images/tree/main/images/windows>\n\n## 示例工作流程\n\n此示例工作流程在容器化环境中使用 GitHub Actions 运行 CodeQL 分析。\n`container.image` 的值标识要使用的容器。 在此示例中，映像名为 `codeql-container`，标记为 `f0f91db`。 有关详细信息，请参阅“[GitHub Actions 的工作流语法](/zh/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idcontainer)”。\n\n```yaml\nname: \"CodeQL\"\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n  schedule:\n    - cron: '15 5 * * 3'\n\njobs:\n  analyze:\n    name: Analyze\n    runs-on: ubuntu-latest\n    permissions:\n      security-events: write\n      actions: read\n\n    strategy:\n      fail-fast: false\n      matrix:\n        language: [java-kotlin]\n\n    # Specify the container in which actions will run\n    container:\n      image: codeql-container:f0f91db\n\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n      - name: Initialize CodeQL\n        uses: github/codeql-action/init@v4\n        with:\n          languages: ${{ matrix.language }}\n      - name: Build\n        run: |\n          ./configure\n          make\n      - name: Perform CodeQL Analysis\n        uses: github/codeql-action/analyze@v4\n```"}