Skip to main content

CodeQL-Codeüberprüfung für kompilierte Sprachen

Verstehen Sie, wie CodeQL kompilierte Sprachen analysiert werden, welche Build-Optionen verfügbar sind, und erfahren Sie, wie Sie bei Bedarf den Datenbankgenerierungsprozess anpassen können.

Wer kann dieses Feature verwenden?

Benutzer*innen mit Schreibzugriff if advanced setup is already enabled

Code scanning ist für die folgenden Repositorytypen verfügbar:

  • Öffentliche Repositorys auf GitHub.com
  • Organisationseigene Repositorys für GitHub Team, GitHub Enterprise Cloud oder GitHub Enterprise Server, wobei GitHub Code Security aktiviert sind.

Vergleich der Buildmodi

Eigenschaft des Build-ModusNichtsAutobuildManuell
Wird standardmäßig eingerichtet und für die Aktivierung auf Organisationsebene verwendetJa (C/C++, C#, Java und Rust)Ja, wo none nicht unterstützt wirdNo
Die Analyse ist ohne Benutzerkonfiguration erfolgreich.JaVariableNo
Vollständigkeit der AnalyseGenerierter Code nicht analysiertVariableVom Benutzer gesteuert
Genauigkeit der AnalyseGutGutSehr hoch

Auswählen eines Buildmodus

Wenn Sie code scanning zum ersten Mal oder in mehreren Repositories einrichten, sollten Sie die Standardeinrichtung verwenden. Das Standardsetup verwendet die einfachste Methode, die verfügbar ist, um eine CodeQL Datenbank zu generieren und Ihren Code zu analysieren, damit Sie Benachrichtigungen so schnell wie möglich beheben können. Nachdem Sie die anfänglichen Warnungen behoben haben, können Sie mit einem manuellen Erstellungsprozess für Repositorys mit hohem Risiko zu erweitertem Setup wechseln.

Informationen zu sprachspezifischem autobuild Verhalten, Läuferanforderungen und Buildmodusdetails für kompilierte Sprachen finden Sie unter CodeQL-Buildoptionen und -schritte für kompilierte Sprachen.

Verwenden mehrerer Buildmodi in einem mehrsprachigen Repository

Für Repositorys mit mehreren kompilierten Sprachen können Sie unterschiedliche Build-Modi für unterschiedliche Sprachen verwenden. Wenn Ihr Repository beispielsweise C/C++, C# und Java enthält, sollten Sie manuelle Buildschritte für eine Sprache (hier C/C++) bereitstellen. Dieser Workflow legt für jede Sprache einen anderen Build-Modus fest.

strategy:
  matrix:
    include:
      # Analyzes C and C++ code using the commands in `Build C and C++ code`
      - language: c-cpp
        build-mode: manual
      # Analyzes C# code by automatically detecting a build
      - language: csharp
        build-mode: autobuild
      # Analyzes Java code directly from the codebase without a build
      - language: java-kotlin
        build-mode: none # analyzes Java only
steps:
- name: Checkout repository
  uses: actions/checkout@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
  name: Build C and C++ code
  run: |
    echo 'If you are using a "manual" build mode for one or more of the' \
      'languages you are analyzing, replace this with the commands to build' \
      'your code, for example:'
    echo ' make bootstrap'
    echo ' make release'
    exit 1

Informationen zu den Sprachen, Bibliotheken und Frameworks, die in der neuesten Version von CodeQLunterstützt werden, finden Sie in der Dokumentation unter CodeQL". Informationen zu den Systemanforderungen für die Ausführung der neuesten Version finden CodeQLSie in der Dokumentation unter CodeQL.

Aktivieren der Zwischenspeicherung von Abhängigkeiten für CodeQL

Für standardmäßige Einrichtungs-Workflows ist das Zwischenspeichern von Abhängigkeiten nur für GitHub-gehostete Runner in öffentlichen und privaten Repositories aktiviert.

Für erweiterte Setupworkflows ist das Zwischenspeichern von Abhängigkeiten standardmäßig deaktiviert. Verwenden Sie zum Aktivieren der Abhängigkeitszwischenspeicherung die Einstellung dependency-caching für die Aktion CodeQL im erweiterten Setup-Workflow. Diese Einstellung akzeptiert die folgenden Werte:

  •         `false`
            /
            `none`
            /
            `off`: Zwischenspeichern von Abhängigkeiten deaktiviert (Standardeinstellung)
    
  •         `restore`: Nur vorhandene Caches wiederherstellen, keine neuen Caches speichern
    
  •         `store`: Nur neue Caches speichern, keine vorhandenen Caches wiederherstellen
    
  •         `true`
            /
            `full`
            /
            `on`: Vorhandene Caches wiederherstellen und neue Caches speichern
    

Die folgenden Einstellungen würden z. B. das Zwischenspeichern von Abhängigkeiten für die CodeQL Aktion aktivieren:

    # Initializes CodeQL with dependency caching enabled
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: java
        dependency-caching: true

Verwenden Sie den none-Buildmodus für CodeQL

Für C/C++, C#, Java und Rust erstellt CodeQL eine Datenbank, ohne dass ein Build erforderlich wird, wenn Sie das Standardsetup für code scanning aktivieren, es sei denn, das Repository enthält auch Kotlin-Code. Wenn ein Repository zusätzlich zu Java Code Kotlin-Code enthält, wird das Standardsetup mit dem AutoBuild-Prozess aktiviert, da die Kotlin-Analyse einen Build erfordert.

Das Erstellen einer CodeQL-Datenbank ohne Build kann zu weniger genauen Ergebnissen führen als die Verwendung von autobuild oder manuellen Erstellungsschritten, wenn:

  • Die Build-Skripte können nicht nach Abhängigkeitsinformationen abgefragt werden, und Abhängigkeitsberechnungen sind ungenau.
  • Das Repository generiert normalerweise Code während des Buildprozesses.

Zum Verwenden von autobuild oder dem manuellen Erstellen von Schritten können Sie das erweiterte Setup verwenden.

Hinweis

Wenn build-mode für die Java-Analyse auf none festgelegt ist und Kotlin-Code im Repository vorhanden ist, wird der Kotlin-Code nicht analysiert, und es wird eine Warnung ausgegeben. Siehe CodeQL-Buildoptionen und -schritte für kompilierte Sprachen.

Verwendung autobuild für CodeQL

Die CodeQL Aktion verwendet autobuild, um kompilierte Sprachen in den folgenden Fällen zu analysieren.

  • Das Standardsetup ist aktiviert, und die Sprache unterstützt none keinen Build (unterstützt für C/C++, C#, Java und Rust).
  • Die erweiterte Einrichtung ist aktiviert, und der Workflow gibt build-mode: autobuild an.
  • Das erweiterte Setup ist aktiviert, und der Workflow verfügt über einen Autobuild-Schritt für die Sprache mithilfe der autobuild Aktion (github/codeql-action/autobuild@v4).

Verwenden Sie die Option build-mode.

# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
  matrix:
    include:
      # Analyze C and C++ code
      - language: c-cpp
        build-mode: autobuild
      # Analyze Go code
      - language: go
        build-mode: autobuild

steps:
  - uses: github/codeql-action/init@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}

Verwenden des AutoBuild-Schritts

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4

Manuelles Angeben von Buildschritten

Sie können nur manuelle Buildschritte angeben, wenn Sie das erweiterte Setup aktiviert haben (siehe Konfigurieren des erweiterten Setups für das Code-Scanning).

Wenn autobuild fehlschlägt oder du eine andere Gruppe von Quelldateien analysieren möchtest, die vom autobuild-Prozess erstellt wurden, musst du die folgenden Schritte ausführen:

  • Wenn Ihr Workflow einen Buildmodus für die Sprache angibt, ändern Sie den Buildmodus in manual.
  • Wenn Ihr Workflow einen autobuild-Schritt vorsieht, entfernen Sie den autobuild-Schritt im Workflow oder kommentieren Sie ihn aus.

Hebe dann die Auskommentierung des Schritts run auf, und gib den zu verwendenden Buildprozess manuell an. Für C/C++, C#, Go, Java, Kotlin und Swift analysiert CodeQL, welcher Quellcode von Ihren angegebenen Buildschritten erstellt wird.

Aktualisiere deine Workflow, um build-mode als manual festzulegen.

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"

Alternativ dazu können Sie Ihren Workflow aktualisieren und den Schritt „Autobuild“ auskommentieren.

    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4

Hinzufügen von Buildbefehlen

Wenn die manuelle Erstellung aktiviert ist, deaktivieren Sie den run-Schritt im Workflow und fügen Sie Build-Befehle hinzu, die für Ihr Repository geeignet sind. Der run-Schritt führt Befehlszeilenprogramme mithilfe der Shell des Betriebssystems aus. Sie können diese Befehle ändern und weitere Befehle hinzufügen, um den Buildprozess anzupassen.

- run: |
    make bootstrap
    make release

Weitere Informationen zum Schlüsselwort run findest du unter Workflowsyntax für GitHub Actions.

Wenn Sie manuelle Buildschritte für kompilierte Sprachen hinzugefügt haben und code scanning in Ihrem Repository weiterhin nicht funktioniert, wenden Sie sich an uns über das GitHub-Support-Portal.