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

Eerst moet het werkstroombestand in de .github/workflows map staan. Het is gebruikelijk om een werkstroom een naam te geven waarmee een nieuw pakket wordt gepubliceerd wanneer een nieuwe release zoiets wordt release-package.ymlgemaakt, zodat projectmedewerkers het doel gemakkelijk kunnen begrijpen zonder naar het werkstroombestand te navigeren.

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

  1. Een taak met de naam build 'ci' voor continue integratie) wordt uitgevoerd npm ci om afhankelijkheden rechtstreeks vanuit het package-lock.json bestand te installeren, evenals de tests voor het project.
  2. Zodra de build taak is voltooid, publiceert de taak met de naam publish-gpr het pakket.
  3. De werkstroom publiceert het pakket naar het registry-url: https://npm.pkg.github.com/ gebruik van een toegangstoken voor verificatie.

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 containerregister dat is ontworpen ter ondersteuning van de unieke behoeften van containerinstallatiekopieën. 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 containerinstallatiekopieën op in uw organisatie en gebruikersaccount in plaats van een opslagplaats.
  • Stel fijnmazige machtigingen in voor de containerinstallatiekopieën.
  • Anonieme toegang tot installatiekopieën van openbare containers.

Nadat u de installatiekopie hebt gemaakt en bent geverifieerd en aangemeld bij de GitHub Container Registry-service ghcr.io, kunt u vervolgens de nieuwste 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 het containerregister op ghcr.io/OWNER/IMAGE-NAME.