Publiceren naar GitHub Packages en GitHub Container Registry

Voltooid

Hier leert u de basisprincipes van het gebruik van een werkstroom voor het publiceren naar GitHub Packages en de benodigde stappen voor het bouwen, verifiëren, taggen en pushen van een Docker-installatiekopieën naar het GitHub Container Registry.

Een werkstroom gebruiken om te publiceren naar GitHub Packages

Met GitHub Packages kunt u veilig pakketten publiceren en gebruiken, uw pakketten naast uw code opslaan en uw pakketten privé delen met uw team of openbaar met de opensource-community. U kunt ook GitHub Actions gebruiken om uw pakketten te automatiseren.

Hieronder volgt een voorbeeld van een eenvoudige werkstroom die wordt uitgevoerd wanneer een nieuwe release wordt gemaakt in een opslagplaats. Als de tests zijn geslaagd, wordt het pakket gepubliceerd naar GitHub Packages.

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}}

Het werkstroombestand moet eerst aanwezig zijn in de map .github/workflows. Het is gebruikelijk om een werkstroom die een nieuw pakket publiceert, een naam te geven zoals release-package.ymlwanneer er een nieuwe release wordt gemaakt. Dit maakt het voor projectmedewerkers gemakkelijk om het doel ervan te begrijpen zonder naar het werkstroombestand te hoeven navigeren.

De voorgaande werkstroom doet enkele dingen nadat een nieuwe release is gemaakt:

  1. Een taak met de naam build voert npm ci uit ("ci" voor Continue Integratie) om afhankelijkheden rechtstreeks vanuit het package-lock.json-bestand te installeren, evenals de tests voor het project.
  2. Nadat de build taak is geslaagd, publiceert de taak met de naam publish-gpr het pakket.
  3. De werkstroom publiceert het pakket naar registry-url: https://npm.pkg.github.com/ met behulp van een toegangstoken voor authenticatie.

GitHub Container Registry gebruiken om Docker-containerinstallatiekopieën te hosten en beheren

GitHub Packages biedt ondersteuning voor het gebruik van containers, Kubernetes en andere cloudtechnologieën voor het beheren van de volledige levenscyclus van toepassingen, waaronder productiebewerkingen, ontwikkeling, release en implementatie. GitHub Packages biedt ook een containerregistry die is ontworpen ter ondersteuning van de unieke behoeften van containerafbeeldingen. U kunt GitHub Container Registry gebruiken om docker-containerinstallatiekopieën naadloos te hosten en te beheren in uw GitHub-organisatie of persoonlijke gebruikersaccount. Met GitHub Container Registry kunt u configureren wie pakketten kan beheren en openen met behulp van verfijnde machtigingen.

Met het containerregister kunt u het volgende doen:

  • Sla containerafbeeldingen op binnen uw organisatie en gebruikersaccount in plaats van in een opslagplaats.
  • Stel fijnmazige machtigingen in voor de containerafbeeldingen.
  • Anoniem toegang krijgen tot openbare containerafbeeldingen.

Nadat u de installatiekopie hebt gemaakt en bent geverifieerd en aangemeld bij de GitHub Container Registry-service op ghcr.io, kunt u vervolgens de meest recente versie van de installatiekopie taggen en naar het containerregister pushen met behulp van deze opdrachten:

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

Notitie

Als u wilt verifiëren met behulp van een GitHub Actions-werkstroom, kunt u een GITHUB_TOKEN gebruiken:

  • Voor pakketregisters op PACKAGE-REGISTRY.pkg.github.com.
  • Voor de containerregistratie bij ghcr.io/OWNER/IMAGE-NAME.