Veröffentlichen in GitHub Packages und GitHub Container Registry

Abgeschlossen

In dieser Lerneinheit lernen Sie die Grundlagen für die Verwendung eines Workflows kennen, mit dem Sie GitHub Packages veröffentlichen können. Außerdem werden die erforderlichen Schritte zum Erstellen, Authentifizieren, Markieren und Pushen eines Docker-Images in GitHub Container Registry erläutert.

Verwenden eines Workflows zum Veröffentlichen in GitHub Packages

Mit GitHub Packages können Sie Pakete sicher veröffentlichen und verarbeiten, Ihre Pakete zusammen mit Ihrem Code speichern und Ihre Pakete privat für Ihr Team oder öffentlich für die Open-Source-Community freigeben. Sie können GitHub Actions auch verwenden, um Ihre Pakete zu automatisieren.

Im Folgenden finden Sie ein Beispiel für einen einfachen Workflow, der immer dann ausgeführt wird, wenn ein neues Release im Repository erstellt wird. Wenn die Tests bestanden werden, wird das Paket in GitHub Packages veröffentlicht.

name: Node.js Package

on:
  release:
    types: [created]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 12
      - run: npm ci
      - run: npm test

  publish-gpr:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 12
          registry-url: https://npm.pkg.github.com/
      - run: npm ci
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Zunächst muss die Workflowdatei im Verzeichnis .github/workflows vorhanden sein. Ein Workflow, der bei jedem neuen Release ein Paket veröffentlicht, wird üblicherweise release-package.yml oder ähnlich genannt, damit Projektmitarbeiter den Zweck verstehen, ohne zur Workflowdatei navigieren zu müssen.

Der obige Workflow führt einige Schritte aus, nachdem ein neues Release erstellt wurde:

  1. Ein Auftrag namens build führt npm ci aus („ci“ für Continuous Integration), um Abhängigkeiten und die Tests für das Projekt direkt aus der Datei package-lock.json zu installieren.
  2. Sobald der build-Auftrag erfolgreich beendet wird, veröffentlicht der Auftrag namens publish-gpr das Paket.
  3. Der Workflow veröffentlicht das Paket unter registry-url: https://npm.pkg.github.com/, und zwar mithilfe eines Zugriffstokens für die Authentifizierung.

Verwenden von GitHub Container Registry zum Hosten und Verwalten von Docker-Containerimages

GitHub Packages unterstützt Container, Kubernetes und andere cloudnative Technologien, um den gesamten Anwendungslebenszyklus einschließlich der Produktionsvorgänge zu verwalten: Entwicklung, Release und Bereitstellung. GitHub Packages bietet auch eine Containerregistrierung, die die besonderen Anforderungen von Containerimages unterstützt. Mit GitHub Container Registry können Sie Docker-Containerimages in Ihrer GitHub-Organisation oder ihrem persönlichen Benutzerkonto nahtlos hosten und verwalten. Mit GitHub Container Registry können Sie mithilfe differenzierter Berechtigungen konfigurieren, wer Pakete verwalten und darauf zugreifen kann.

Mit der Containerregistrierung haben Sie folgende Möglichkeiten:

  • Speichern von Containerimages in Ihrer Organisation und Ihrem Benutzerkonto anstelle eines Repositorys.
  • Festlegen differenzierter Berechtigungen für die Containerimages
  • Anonymer Zugriff auf öffentliche Containerimages

Nachdem Sie das Image erstellt, authentifiziert und beim Dienst „GitHub Container Registry“ unter ghcr.io angemeldet haben, können Sie die neueste Version des Images mithilfe der folgenden Befehle taggen und in die Containerregistrierung pushen:

echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin

docker tag IMAGE_ID ghcr.io/OWNER/IMAGE_NAME:latest

docker push ghcr.io/OWNER/IMAGE_NAME:latest

Hinweis

Für die Authentifizierung mithilfe eines GitHub Actions-Workflows können Sie ein GITHUB_TOKEN verwenden:

  • Für Paketregistrierungen unter PACKAGE-REGISTRY.pkg.github.com
  • Für die Containerregistrierung unter ghcr.io/OWNER/IMAGE-NAME