Publicación en Paquetes de GitHub y GitHub Container Registry

Completado

Aquí aprenderá los conceptos básicos del uso de un flujo de trabajo para publicar en paquetes de GitHub y los pasos necesarios para compilar, autenticar, etiquetar e insertar una imagen de Docker en GitHub Container Registry.

Uso de un flujo de trabajo para publicar en paquetes de GitHub

Los paquetes de GitHub le permiten publicar y consumir paquetes de forma segura, almacenar los paquetes junto con el código y compartir los paquetes de forma privada con su equipo o públicamente con la comunidad de código abierto. También puede usar Acciones de GitHub para automatizar los paquetes.

A continuación se muestra un ejemplo de un flujo de trabajo básico que se ejecuta cada vez que se crea una nueva versión en un repositorio. Si se superan las pruebas, el paquete se publica en Paquetes de GitHub.

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

En primer lugar, el archivo de flujo de trabajo debe existir en el .github/workflows directorio . Es habitual asignar un nombre a un flujo de trabajo que publique un nuevo paquete cada vez que se cree una nueva versión como release-package.yml, para facilitar que los colaboradores del proyecto comprendan su propósito sin navegar al archivo de flujo de trabajo.

El flujo de trabajo anterior realiza algunas cosas después de crear una nueva versión:

  1. Un trabajo denominado build ejecuta npm ci ("ci" para Integración Continua) para instalar dependencias directamente desde el archivo package-lock.json, así como las pruebas del proyecto.
  2. Una vez que el build trabajo se realiza correctamente, el trabajo denominado publish-gpr publica el paquete.
  3. El flujo de trabajo publica el paquete en el registry-url: https://npm.pkg.github.com/ usando un token de acceso para la autenticación.

Uso de GitHub Container Registry para hospedar y administrar imágenes de contenedor de Docker

Los paquetes de GitHub admiten el uso de contenedores, Kubernetes y otras tecnologías nativas de la nube para administrar todo su ciclo de vida de la aplicación, incluidas las operaciones de producción, el desarrollo, la versión y la implementación. En Paquetes de GitHub también se ofrece un registro de contenedor diseñado para admitir las necesidades únicas de las imágenes de contenedor. Puede usar GitHub Container Registry para hospedar y administrar sin problemas imágenes de contenedor de Docker en su organización de GitHub o cuenta de usuario personal. GitHub Container Registry permite configurar quién puede administrar y acceder a los paquetes mediante permisos específicos.

Con el registro de contenedor, puede hacer lo siguiente:

  • Almacene imágenes de contenedor dentro de su organización y cuenta de usuario en lugar de un repositorio.
  • Establezca permisos específicos para las imágenes de contenedor.
  • Acceda a imágenes de contenedor públicas de forma anónima.

Después de compilar la imagen y autenticarse e iniciar sesión en el servicio GitHub Container Registry en ghcr.io, puede etiquetar e insertar la versión más reciente de la imagen en el registro de contenedor mediante estos comandos:

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

Nota:

Para autenticarse mediante un flujo de trabajo de Acciones de GitHub, puede usar un GITHUB_TOKEN:

  • Para los registros de paquetes en PACKAGE-REGISTRY.pkg.github.com.
  • Para el registro de contenedor en ghcr.io/OWNER/IMAGE-NAME.