Blog

Aktivieren von CodeQL auf GitHub Enterprise Server

Rob Bos

Aktualisiert Oktober 15, 2025
3 Minuten

Um CodeQL auf GitHub Enterprise Server zu aktivieren, müssen Sie sicherstellen, dass GitHub Actions eingerichtet ist und läuft, einschließlich Ihres eigenen Satzes von selbst gehosteten Runnern. Mehr dazu erfahren Sie in meinem früheren Beitrag hier.

Von diesem Punkt aus können Sie CodeQL aktivieren. Natürlich müssen Sie es in Ihrer Lizenz aktivieren und diese Lizenzdatei auch auf Ihren Server hochladen. Die Aktivierung beginnt auf der Appliance-Ebene, wo Sie die Funktionen Code-Scanning und Secret-Scanning über die Verwaltungskonsole aktivieren müssen.

 

Der Standard-Workflow, den CodeQL vorschlägt, verweist auf den github/codeql-action Aktion, von der bei jedem Enterprise Server-Update eine statische Kopie installiert wird. Diese Organisation ist standardmäßig ausgeblendet, aber Sie können über den Direktlink dorthin navigieren. Das Problem dabei ist, dass diese Aktions-Repos (github/dependabot-action und alle Repos in der actions-Organisation) nur über den Quellcode verfügen, der mit jedem Enterprise Server-Update verknüpft und aktualisiert wird. Da das CodeQL-Bündel als Release-Asset gespeichert ist, fehlt es in der Appliance. Das Bundle enthält alle CodeQL-Abfragen, einschließlich der security-extended und security-and-quality Abfragetypen.

Synchronisierung des CodeQL-Bündels

Normalerweise würden wir die Aktionen-Synchronisation Tool, um die Aktionen auf der Appliance mit der neuesten Version auf github.com zu aktualisieren. Leider synchronisiert dieses Tool keine Release-Assets. Um die Release Assets zu synchronisieren, müssen wir die neueste Version des codeql-action-sync-tool.

Nach dem Herunterladen der codeql-action-sync-toolmüssen Sie sicherstellen, dass Sie Schreibzugriff auf die Datei github Organisation. Standardmäßig haben Sie sie nicht, so dass Sie nicht write zu den Freigabe-Assets oder irgendetwas anderem in dieser Org. Das bedeutet, dass wir den Benutzer, der die Synchronisierung durchführt, zu einem Eigentümer der github org.

Dazu müssen Sie das Befehlszeilenprogramm ghe-org-admin-promote von einer entfernten Shell auf der Appliance aufrufen:

ghe-org-admin-promote -u USERNAME -o ORGANIZATION

Jetzt können wir die codeql-action-sync-tool um die neueste Version des CodeQL-Pakets herunterzuladen und in das github/codeql-action Repo. Dieses Tool aktualisiert auch die github/codeql-action Repo mit der neuesten Version des Aktionscodes. Sie können ihn mit diesem Befehl ausführen:

codeql-action-sync-tool sync --force 
 --destination-url https://enterprise-server-url.com
 --destination-token <PAT> 
 --source-token <PAT> # prevents ratelimiting

Natürlich muss der Rechner, auf dem dies ausgeführt wird, Zugriff auf github.com sowie auf den Enterprise Server haben. Die --source-token ist optional, aber es verhindert, dass Sie das Ratenlimit auf github.com erreichen.

CodeQL effizient ausführen

Jetzt, da wir das CodeQL-Bündel auf der Appliance haben, können wir es verwenden. Das erste, was Ihnen auffallen wird, ist, dass das CodeQL-Bündel ziemlich groß ist. Allein die Linux-Zip-Datei ist 500Mb groß, was für eine GitHub-Aktion ziemlich viel ist. Für jeden Lauf wird das für das Betriebssystem des Läufers geeignete Release Asset heruntergeladen. Wenn Sie ephemere Runner verwenden (was Sie tun sollten!), bedeutet dies, dass das CodeQL-Bündel für jeden einzelnen Lauf heruntergeladen wird. Da dieser Workflow standardmäßig so konfiguriert ist, dass er bei jedem Push- und Pull-Request sowie nach einem Zeitplan (einmal pro Woche) ausgeführt wird, kann er eine große Bandbreite beanspruchen und damit Ihre Appliance belasten.

Die Aktion folgt der normalen Einrichtung für GitHub-Aktionen, um nach dem bekannten Ordner zu suchen runner.tool_cacheder in '/opt/hostedtoolcache/' gespeichert ist. Wenn es das Bundle in diesem Ordner finden kann, wird es verwendet. Wenn es nicht gefunden wird, lädt es das entsprechende Release-Asset herunter.

Das bedeutet, dass wir unsere Runner vorbereiten können, indem wir das CodeQL-Bundle an diesen Ort kopieren. Dadurch wird verhindert, dass das Bundle bei jedem Lauf heruntergeladen werden muss. Der Ordner wird verwendet, indem er die CodeQL-Bundle-Version und das Datum enthält: /opt/hostedtoolcache/CodeQL/2.12.1-20230120/x64/codeql/codeql.

Wenn Sie diesen Ort vorbereiten, wird der Download-Druck auf Ihre Appliance erheblich reduziert und die Ausführung des CodeQL-Workflows beschleunigt.

Verfasst von

Rob Bos

Rob has a strong focus on ALM and DevOps, automating manual tasks and helping teams deliver value to the end-user faster, using DevOps techniques. This is applied on anything Rob comes across, whether it’s an application, infrastructure, serverless or training environments. Additionally, Rob focuses on the management of production environments, including dashboarding, usage statistics for product owners and stakeholders, but also as part of the feedback loop to the developers. A lot of focus goes to GitHub and GitHub Actions, improving the security of applications and DevOps pipelines. Rob is a Trainer (Azure + GitHub), a Microsoft MVP and a LinkedIn Learning Instructor.

Contact

Let’s discuss how we can support your journey.