Hinweis: Dieser Artikel wurde im Januar 2023 von der CodeQL-Dokumentationswebsite migriert.
Hinweis: Die CodeQL-Paketverwaltungsfunktionen (einschließlich der CodeQL-Pakete) sind derzeit als Betaversion verfügbar und können noch geändert werden. Während der Betaversion sind CodeQL-Pakete nur mit GitHub-Paketen verfügbar – in der Container registry. Um diese Betafunktion zu verwenden, installiere die neueste Version des CodeQL CLI-Bundles aus https://github.com/github/codeql-action/releases.
Informationen zu CodeQL-Paketen und der CodeQL CLI
Mit CodeQL-Paketen und den Paketverwaltungsbefehlen in der CodeQL CLI kannst du deine benutzerdefinierten Abfragen veröffentlichen und in deine Codebaseanalyse integrieren.
Es gibt zwei Arten von CodeQL-Paketen: Abfragepakete und Bibliothekspakete.
-
Abfragepakete sind zum Ausführen konzipiert. Wenn ein Abfragepaket veröffentlicht wird, enthält es alle transitiven Abhängigkeiten und vorkompilierten Darstellungen jeder Abfrage, zusätzlich zu den Abfragequellen. Dadurch wird konsistentes und effizientes Ausführen der Abfragen im Paket sichergestellt.
-
Bibliothekspakete sind zum Verwenden durch Abfragepakete oder andere Bibliothekspakete konzipiert und enthalten selbst keine Abfragen. Die Bibliotheken werden nicht separat kompiliert.
Du kannst den pack
-Befehl in der CodeQL CLI verwenden, um CodeQL-Pakete zu erstellen, Abhängigkeiten zu Paketen hinzuzufügen und Abhängigkeiten zu installieren oder zu aktualisieren. Du kannst CodeQL-Pakete auch mithilfe des pack
-Befehls veröffentlichen und herunterladen. Weitere Informationen findest du unter Veröffentlichen und Verwenden von CodeQL-Paketen.
Weitere Informationen zur Kompatibilität zwischen veröffentlichten Abfragepaketen und verschiedenen CodeQL-Releases findest du unter Veröffentlichen und Verwenden von CodeQL-Paketen.
Erstellen eines CodeQL-Pakets
Du kannst ein CodeQL-Paket erstellen, indem du den folgenden Befehl über den Check-Out-Stamm deines Projekts ausführst:
codeql pack init <scope>/<pack>
Dabei musst du Folgendes festlegen:
-
<scope>
: Name der GitHub-Organisation oder des Benutzerkontos, in die bzw. das du veröffentlichen möchtest -
<pack>
: Name des Pakets, das du erstellst
Der Befehl codeql pack init
erstellt die Verzeichnisstruktur und Konfigurationsdateien für ein CodeQL-Paket. Der Befehl erstellt standardmäßig ein Abfragepaket. Wenn du ein Bibliothekspaket erstellen möchtest, musst du die qlpack.yml
-Datei bearbeiten, um die Datei explizit als Bibliothekspaket zu deklarieren, indem du die Eigenschaft library:true
einschließt.
Ändern eines vorhandenen QL-Legacypakets zum Erstellen eines CodeQL-Pakets
Wenn du bereits über eine qlpack.yml
-Datei verfügst, kannst du sie manuell bearbeiten, um sie in ein CodeQL-Paket zu konvertieren.
-
Bearbeite die
name
-Eigenschaft so, dass sie dem Format<scope>/<name>
entspricht, wobei<scope>
der Name der GitHub-Organisation oder des Benutzerkontos ist, in die bzw. das du veröffentlichen möchtest. -
Schließe in der
qlpack.yml
-Datei eineversion
-Eigenschaft mit einem SemVer-Bezeichner sowie einen optionalendependencies
-Block ein. -
Migriere die Liste der Abhängigkeiten in
libraryPathDependencies
zumdependencies
-Block. Gib den Versionsbereich für jede Abhängigkeit an. Wenn der Bereich nicht wichtig ist oder du dir der Kompatibilität nicht sicher bist, kannst du"\*"
angeben. Dies legt fest, dass jede Version akzeptabel ist und standardmäßig die neueste Version verwendet wird, wenn ducodeql pack install
ausführst.
Weitere Informationen zu den Eigenschaften findest du unter Anpassen der Analyse mit CodeQL-Paketen.
Installieren von und Hinzufügen von Abhängigkeiten zu einem CodeQL-Paket
Du kannst CodeQL-Paketen mit dem codeql pack add
-Befehl Abhängigkeiten hinzufügen. Du musst den Bereich, den Namen und (optional) einen kompatiblen Versionsbereich angeben.
codeql pack add <scope>/<name>@x.x.x <scope>/<other-name>
Wenn du keinen Versionsbereich angibst, wird die neueste Version hinzugefügt. Andernfalls wird die neueste Version hinzugefügt, die den angeforderten Bereich erfüllt.
Dieser Befehl aktualisiert die qlpack.yml
-Datei mit den angeforderten Abhängigkeiten und lädt sie in den Paketcache herunter. Beachte, dass mit diesem Befehl die Datei neu formatiert wird und alle Kommentare entfernt werden.
Du kannst die qlpack.yml
-Datei auch manuell bearbeiten, um Abhängigkeiten einzuschließen, und dann kannst du die Abhängigkeiten mit dem folgenden Befehl installieren:
codeql pack install
Mit diesem Befehl werden alle Abhängigkeiten in den freigegebenen Cache auf dem lokalen Datenträger heruntergeladen.
Hinweise:
-
Durch Ausführen der Befehle
codeql pack add
undcodeql pack install
wird diecodeql-pack.lock.yml
-Datei generiert oder aktualisiert. Diese Datei sollte in die Versionskontrolle eingecheckt werden. Diecodeql-pack.lock.yml
-Datei enthält die genauen Versionsnummern, die vom Paket verwendet werden. Weitere Informationen findest du unter Informationen zu codeql-pack.lock.yml-Dateien. -
codeql pack install
installiert Abhängigkeiten standardmäßig über die Container registry auf GitHub.com. Du kannst Abhängigkeiten über eine GitHub Enterprise Server-Container registry installieren, indem du eineqlconfig.yml
-Datei erstellst. Weitere Informationen findest du unter Veröffentlichen und Verwenden von CodeQL-Paketen in der GitHub Enterprise Server-Dokumentation.
Anpassen eines heruntergeladenen CodeQL-Pakets
Die empfohlene Methode, mit Änderungen an einem Paket zu experimentieren, besteht darin, das Repository mit dem Quellcode zu klonen.
Wenn kein Quellrepository verfügbar ist und du grundlegende Änderungen an einem Paket vornehmen musst, das aus der Container registry heruntergeladen wurde, solltest du beachten, dass diese Pakete nicht für Änderungen oder Anpassungen nach dem Herunterladen konzipiert sind und sich ihr Format in Zukunft ohne große Ankündigung ändern kann. Es wird empfohlen, nach dem Herunterladen eines Pakets die folgenden Schritte auszuführen, wenn du den Inhalt ändern musst:
-
Ändere den Namen des Pakets in
qlpack.yml
, um Verwechslungen mit den Ergebnissen des nicht geänderten Pakets zu vermeiden. -
Entferne alle Dateien namens
*.qlx
in der entpackten Verzeichnisstruktur. Diese Dateien enthalten vorkompilierte Versionen der Abfragen, und in einigen Situationen verwendet CodeQL sie anstelle der geänderten QL-Quelle.