Hinweis
Der Websiteadministrator muss code scanning aktivieren, damit du dieses Feature verwenden kannst. Wenn du GitHub Actions zum Überprüfen deines Codes verwenden möchtest, muss der Websiteadministrator auch GitHub Actions aktivieren und die erforderliche Infrastruktur einrichten. Weitere Informationen finden Sie unter Konfigurieren der Codeüberprüfung für Ihre Anwendung.
Vergleich der Buildmodi
| Eigenschaft des Build-Modus | Nichts | Autobuild | Manuell |
|---|---|---|---|
| Wird standardmäßig eingerichtet und für die Aktivierung auf Organisationsebene verwendet | Ja (C# und Java) | Ja, wo none nicht unterstützt wird | No |
| Die Analyse ist ohne Benutzerkonfiguration erfolgreich. | Ja | Variable | No |
| Vollständigkeit der Analyse | Generierter Code nicht analysiert | Variable | Vom Benutzer gesteuert |
| Genauigkeit der Analyse | Gut | Gut | Sehr 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# und Java 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
nonekeinen Build (unterstützt für C# und Java). - Die erweiterte Einrichtung ist aktiviert, und der Workflow gibt
build-mode: autobuildan. - Das erweiterte Setup ist aktiviert, und der Workflow verfügt über einen Autobuild-Schritt für die Sprache mithilfe der
autobuildAktion (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 denautobuild-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 Ihrer Websiteadministratoren.