Problembehandlung von CodeQL-Ergebnissen
Diese Lektion enthält Tipps zur Optimierung und Problembehandlung bei der Arbeit mit CodeQL und Codescans.
Optimieren von CodeQL-Analyselaufzeiten
Es gibt mehrere Gründe, warum Ihre CodeQL-Analyse zu lange dauern kann, bis sie abgeschlossen ist:
- Wenn Sie selbst gehostete Runner für die CodeQL-Analyse verwenden, können Sie den Arbeitsspeicher oder die Anzahl der Prozessorkerne erhöhen.
- Probleme können auftreten, wenn ein Repository mehrere Sprachen enthält. Sie können Ihren Workflow so ändern, dass eine Matrix verwendet wird, die die Analyse mehrerer Sprachen beschleunigt. Die Analyse jeder Sprache wird parallel zum Standardmäßigen CodeQL-Analyseworkflow ausgeführt. Möglicherweise müssen Sie erweiterte Workflows ähnlich konfigurieren, wenn sie so eingerichtet sind, dass die Sprachinitialisierung und -analyse sequenziell ausgeführt werden.
- Der Code, den Sie analysieren, kann zu langen Laufzeiten führen. Die Analysezeit ist in der Regel proportional zur Menge des zu analysierenden Codes. Sie können die Größe des Codes reduzieren, indem Sie Testcode ausschließen oder den Code in mehrere Workflows aufteilen, um nur eine Teilmenge mit jedem Scan zu analysieren.
- Möglicherweise möchten Sie die Analyse nur beim
scheduleEreignis auslösen, wenn die Analyse währendpush- oderpull_request-Ereignissen zu langsam ist.
Optimieren von CodeQL-Abfragen
Einige Leistungsprobleme können aus benutzerdefinierten Abfragen auftreten. In der CodeQL-Dokumentation zur Problembehandlung bei der Abfrageleistung finden Sie häufig auftretende Probleme und informationen zur Problembehandlung.
Hier sind wichtige Punkte, die Sie berücksichtigen sollten, während Sie mit CodeQL und der QL-Abfragesprache arbeiten:
- CodeQL-Prädikate und Klassen werden in Datenbanktabellen ausgewertet. Große Prädikate generieren große Tabellen mit vielen Zeilen, sodass sie teuer zu berechnen sind.
- Die QL-Sprache wird über Standarddatenbankvorgänge und relationale Algebra implementiert, z. B. Verknüpfung, Projektion und Union.
- Abfragen werden unten nach oben ausgewertet, was bedeutet, dass ein Prädikat erst ausgewertet wird, wenn alle Prädikate, von denen es abhängt, ausgewertet werden.
Debuggen von Artefakten
Sie können Artefakte abrufen, die Ihnen beim Debuggen von Problemen mit CodeQL-Codescans helfen. Ändern Sie den init Schritt Ihrer CodeQL-Workflowdatei und nehmen Sie die Einstellung debug: true vor. Die Debugartefakte werden in den Workflow hochgeladen und als Artefakt namens debug-artifacts ausgeführt. Die Daten enthalten die CodeQL-Protokolle, CodeQL-Datenbanken und alle SARIF-Dateien, die der Workflow erzeugt.
Fehlerbehebung bei der CodeQL-Erweiterung für VS Code
Die Protokolldateien der VS Code-Erweiterung enthalten detaillierte Informationen, die Ihnen bei der Problembehandlung helfen.
Status- und Fehlermeldungen werden in der unteren rechten Ecke des Arbeitsbereichs als Benachrichtigungen angezeigt. Sie können die Dropdownliste "CodeQL-Erweiterungsprotokoll " verwenden, um die benötigten Protokolle auszuwählen.
Häufige Fehlermeldungen
Um Probleme mit Ihrem CodeQL-Workflow zu beheben, machen Sie sich mit den folgenden allgemeinen Fehlermeldungen vertraut.
Fehler: „Server error“ (Serverfehler)
Wenn ein Workflow für die Codeüberprüfung aufgrund eines Serverfehlers fehlschlägt, kann ein vorübergehendes Kommunikationsproblem die Ursache sein. Führen Sie den Workflow erneut aus. Wenn das Problem weiterhin besteht, wenden Sie sich an den GitHub-Support.
Fehler: "Nicht genügend Datenträger" oder "Nicht genügend Arbeitsspeicher"
CodeQL kann für Projekte, die zu groß sind, nicht genügend Datenträger oder Arbeitsspeicher auf dem Läufer haben. Wenn es sich um einen gehosteten GitHub Actions runner handelt, wenden Sie sich an den GitHub-Support, um das Problem zu untersuchen. Wenn es sich um einen selbstgehosteten Runner handelt, müssen Sie möglicherweise Anpassungen an den Serverspezifikationen vornehmen. Weitere Informationen finden Sie in der CodeQL-Dokumentation zu empfohlener Hardware für die Ausführung von CodeQL.
Fehler: 403 "Ressource nicht durch Integration zugänglich" bei Verwendung von Dependabot
Dependabot gilt als nicht vertrauenswürdig, wenn es einen Workflow auslöst. Der Workflow wird mit schreibgeschützten Geltungsbereichen ausgeführt. Das Hochladen von Codescanergebnissen für einen Branch erfordert in der Regel security_events: write scope. Die Codeüberprüfung ermöglicht jedoch immer das Hochladen von Ergebnissen, wenn das pull_request Ereignis die Ausführung der Aktion auslöst. Für Dependabot-Verzweigungen empfehlen wir, das pull_request-Ereignis anstelle des push-Ereignisses zu verwenden.
Ein einfacher Ansatz besteht in der Ausführung von Pushes in den Standardbranch und alle anderen wichtigen zeitintensiven Branches sowie in Pull Requests, die für diese Gruppe von Branches geöffnet werden.
Ein Beispiel:
on:
push:
branches:
- main
pull_request:
branches:
- main
Fehler: "SARIF Upload abgelehnt aufgrund des Standardsetups"
SARIF-Uploads werden blockiert, wenn das CodeQL-Standardsetup aktiviert ist. Dieser Fehler tritt auf, wenn ein Prozess versucht, eine SARIF-Datei mit CodeQL-Analyseergebnissen in ein Repository hochzuladen, bei dem die Standardeinrichtung aktiviert ist. Der Fehler tritt auch auf, wenn der Upload über die REST-API und die CodeQL CLI erfolgt. Dieser Block ist vorhanden, um das Potenzial für Benutzerverwechslungen zu verringern, wenn mehrere Systeme ähnliche Codescanbenachrichtigungen generieren.
Dieser Fehler tritt nur für SARIF-Dateien auf, die Ergebnisse enthalten, die Sie mithilfe von CodeQL erstellen. Um diesen Fehler zu beheben, deaktivieren Sie CodeQL im Repository, und versuchen Sie dann erneut, die SARIF-Datei hochzuladen.
Weiterführende Lektüre
Weitere Informationen zur Problembehandlung finden Sie in der CodeQL-Dokumentation zur Problembehandlung bei der Codeüberprüfung.