GitHub verfügt über eine Funktion namens GitHub Actions, die automatische Builds, Tests und andere Skripts ausführt, wenn Sie Änderungen an einem Repository vornehmen. Ein praktischer Anwendungsfall dafür ist das automatische Erstellen und Pushen von Docker-Containern in eine Container-Registrierung.
Neue Containerregistrierung von GitHub
Die neue Containerregistrierung von GitHub, genannt GitHub Container Registry, unterscheidet sich ein wenig von den meisten Registrierungen wie Docker Hub. Es fungiert als Erweiterung von GitHub Packages, einem Paketspeichersystem, das Pakete mit ihren Quellcode-Repositorys verknüpft. Pakete können erstellt und aus dem Repository gepusht werden, oft automatisch mit Hilfe einer GitHub Actions-Pipeline.
GitHub Container Registry fügt einfach Docker-spezifische Kompatibilität zu GitHub-Paketen hinzu, wodurch es wie eine Containerregistrierung funktioniert, um docker pull
auszuführen und andere CLI-Befehle.
Sie müssen nicht in der Containerregistrierung von GitHub veröffentlichen – Sie können immer noch von einer Aktion mit einer gewissen Konfiguration im Docker Hub veröffentlichen. Die vorgefertigten Aktionen funktionieren jedoch sofort mit GHCR, sodass die Einrichtung viel einfacher ist.
So richten Sie automatische Builds für GitHub-Pakete ein
Zu Beginn benötigen Sie ein Repository. Selbst wenn Sie nur Pakete veröffentlichen, benötigen Sie dennoch ein Repo, da das Format für GHCR lautet:
ghcr.io/username/repository/image:version
Richten Sie ein Repo ein und klicken Sie dann auf „Aktionen“, um eine neue Aktion zu erstellen. Klicken Sie unter „Weitere Continuous-Integration-Workflows“ auf „Docker-Container veröffentlichen“.
Dadurch wird ein Starter-Template generiert, das einige Änderungen erfordert, um zu funktionieren. Zuerst der IMAGE_NAME
Variable muss in Ihren Bildnamen geändert werden.
Dann finden Sie in Zeile 39, wo es sich bei GHCR anmeldet.
run: echo "${{ secrets.CR_PAT }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
Derzeit ist das einzige unterstützte Authentifizierungsschema Personal Access Tokens (PATs), was für die Sicherheit nicht besonders geeignet ist, da es einen kontoweiten Zugriff gewährt. GitHub weiß das und arbeitet an einer besseren Lösung für die Zukunft, aber in der Zwischenzeit müssen Sie, wenn Sie GHCR aus einem GitHub Actions-Workflow verwenden möchten, ein PAT in den Secrets für Ihr Repository speichern, da offensichtlich nur Einfügen es hier drin wäre entsetzlich.
Zuerst müssen Sie zu Einstellungen> Entwicklereinstellungen> Persönliche Zugriffstoken gehen und ein neues Token erstellen. Dieses Token benötigt write:packages
und delete:packages
die Einstellungen. Beachten Sie, dass aus irgendeinem Grund beim Auswählen von Write Packages automatisch „Full Control Of Repositories“ ausgewählt wird, was Sie deaktivieren müssen.
Gehen Sie dann zu den Einstellungen des Repositorys und erstellen Sie ein neues Geheimnis namens CR_PAT
, passend zur Aktion.
Gehen Sie zurück zur Aktion und klicken Sie auf „Commit starten“, um sie in das Repository zu verschieben.
Sobald es festgeschrieben ist, wird es einen Workflow auslösen, um das Paket auszuführen und zu erstellen. Unter dem Reiter „Aktionen“ können Sie den Status aller laufenden Workflows überwachen. Hier ist es fehlgeschlagen, weil die Standardaktionen erwarten, dass Tests ausgeführt werden, die dieses Image nicht hatte.
Sobald dies erfolgreich war, sollten Sie den Container in der Registrierung unter „Pakete“ auf der Hauptseite des Repositorys oder unter den Paketen in Ihrem Profil sehen.