{"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/run-in-a-container","title":"在容器中运行"}],"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/how-tos/find-and-fix-code-vulnerabilities/integrate-with-existing-tools/use-with-existing-ci-system)。 如果使用 GitHub Actions，请将工作流配置为在同一容器中运行所有操作。 有关详细信息，请参阅[示例工作流](#example-workflow)。\n\n> \\[!NOTE]\n> CodeQL CLI 当前与非 glibc Linux 发行版不兼容，例如（基于 musl 的）Alpine Linux。\n\n## CodeQLcode 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/reference/workflows-and-actions/workflow-syntax#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```"}