![Erstellen eines Ubuntu-Kernels mit GitHub Actions](https://assets.gcore.pro/blog_containerizing_prod/uploads/2023/06/building-ubuntu-kernel-github-actions-fi.png)
Es ist für jeden DevOps-Experten wichtig, auf dem neuesten Stand der Kernel-Entwicklung zu sein. Canonical, das Kraftpaket hinter Ubuntu, verfolgt die Entwicklung des Mainline-Kernels über das Mainline-Crack Git-Repository. In diesem Blogbeitrag untersuchen wir den Aufbau einer effizienten GitHub-Actions-Pipeline, die den Build-Prozess und die Verteilung von Ubuntu-Kernel-Deb-Paketen automatisiert.
Canonical bietet ein praktisches Debian/Rules-Makefile, das die Erstellung des Ubuntu-Kernels vereinfacht. Dieses Makefile ist das wichtigste Tool, das wir in unserem Beispiel verwenden. Um mehr über debian/rules zu erfahren, lesen Sie die debmake-doc.
Überblick über die CI-Pipeline
Die Pipeline umfasst zwei Hauptaufgaben: Einen Build erstellen und diesen veröffentlichen. Der Build-Job wird in einem benutzerdefinierten Docker-Container mit dem Namen
Beginnen wir mit dem Überblick über die gesamte CI-Pipeline:
Name: CI on: [push, workflow_dispatch] jobs: build: runs-on: [ubuntu-22-04, x64, heavy, self-hosted] container: custom-linux-builder-jammy:latest steps: - uses: actions/checkout@v3 - name: Cleanup run: | debian/rules clean rm -rf ../*.deb /packages - name: Dependencies run: | apt-get update && \ mk-build-deps \ --tool 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ --install --remove debian/control - name: Build run: | debian/rules do_tools=true binary-generic binary mkdir /packages && cp -f ../*deb /packages/. - uses: actions/upload-artifact@v3 with: name: linux_package path: /packages/ publish: runs-on: [self-hosted, ubuntu-22-04] needs: [build] steps: - name: Get Secrets uses: hashicorp/vault-action@v2.4.1 id: secrets with: url: <VAULT_INSTANCE_URL> token: ${{ secrets.VAULT_TOKEN }} secrets: | <PATH_TO_PRIVATE_KEY>| key ; - uses: actions/download-artifact@v3 with: name: linux_package - name: Send to Repo uses: appleboy/scp-action@master with: host: <REPOSITORY_URL> username: <REPOSITORY_USERNAME> key: ${{ steps.secrets.outputs.key }} port: <PORT_NUMBER> source: "*.deb" target: <PATH_IN_REPOSITORY>
Im Detail
Lassen Sie uns in die Tiefe gehen und die GitHub-Actions-Pipeline im Detail betrachten.
Build-Phase
Die Build-Phase ist das Herzstück der Pipeline und ist für die Kompilierung und Verpackung des Ubuntu-Kernels verantwortlich. Die Pipeline verwendet das Docker-Image
Checkout
Der Schritt
Cleanup (Bereinigung)
Der Cleanup-Schritt entfernt alle Reste aus früheren Arbeitsabläufen. Er bereinigt den Quellbaum und entfernt alle übrig gebliebenen .deb-Pakete aus früheren Builds, sodass Sie ganz neu beginnen können. Hier sind die relevanten Befehle:
debian/rules clean rm -rf ../*.deb
Dependencies (Abhängigkeiten)
Der Dependencies-Schritt bereitet die in
apt-get update && \ mk-build-deps \ --tool 'apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' \ --install --remove debian/control
Build
debian/rules do_tools=true binary-generic binary mkdir /packages && cp -f ../*deb /packages/.
Der Build-Schritt umfasst die eigentliche Kompilierung und Verpackung des Ubuntu-Kernels. Er führt das Skript
Die Reihenfolge dieser Ziele ist wichtig. Der Parameter
Sobald der Build abgeschlossen ist, werden die resultierenden Debian-Pakete im übergeordneten Verzeichnis (
Upload Artifact (Artefakt-Upload)
Nachdem der Build erfolgreich abgeschlossen wurde, übernimmt der Schritt
Publish (Veröffentlichen)
Die letzte Stufe in unserer Pipeline ist der Publish-Job. Dieser Job lädt die zuvor erstellten Kernel-Pakete in das Repository hoch. Die Schritte sind relativ einfach:
- Secrets sichern: Zunächst verwenden wir
, um Secrets aus einer HashiCorp-Vault-Instanz zu holen. So erhalten Sie sicheren Zugriff auf die Ressourcen, die Sie für die nächsten Schritte dieses Jobs benötigen. - Artefakt abrufen: Dieser Schritt ruft das Artefakt ab, das durch den vorherigen Build-Job über
erzeugt wurde. - Deployment ins Repository: Dieser Schritt verwendet
, um die Debian-Pakete sicher in das gewünschte entfernte Repository zu übertragen.
Mit diesen Schritten im Publish-Job werden die Ubuntu-Kernel-Deb-Pakete erfolgreich in das angegebene Repository hochgeladen, was einen einfachen Zugriff und eine effiziente Verteilung gewährleistet.
Fazit
Mit dieser einfachen GitHub-Actions-Pipeline wird das Erstellen (Build) und Veröffentlichen (Publish) von Ubuntu-Kerneln zu einem automatisierten und effizienten Prozess, bei dem das Risiko menschlicher Fehler geringer ist. Wir hoffen, dass dieser Leitfaden Ihnen hilft, Ihre DevOps-Prozesse zu rationalisieren und Ihre Produktivität zu steigern!