Skip to main content

Trabajar con el registro de RubyGems

Puedes configurar RubyGems para publicar un paquete para GitHub Packages y utilizar paquetes almacenados en GitHub Packages como dependencias en un proyecto Ruby con Bundler.

Note

Este tipo de paquete podría no estar disponible para tu instancia, ya que los administradores del sitio pueden habilitar o inhabilitar cada tipo de paquete compatible. Para obtener más información, vea «Configurar la compatibilidad del ecosistema de paquetes para tu empresa».

Requisitos previos

  • Debes contar con RubyGems 2.4.1 o superior. Para encontrar tu versión de RubyGems:

    gem --version
    
  • Debes tener Bundler 1.6.4 o superiores. Para encontrar tu versión Bundler:

    $ bundle --version
    Bundler version 1.13.7
    

Autenticar a GitHub Packages

Note

GitHub Packages solo admite la autenticación mediante un personal access token (classic). Para obtener más información, vea «Administración de tokens de acceso personal».

Necesitas un token de acceso para publicar, instalar y eliminar paquetes privados, internos y públicos.

Puedes usar un personal access token (classic) para autenticarte en GitHub Packages o en la API de GitHub Enterprise Server. Cuando creas un personal access token (classic), puedes asignar al token diferentes ámbitos en función de tus necesidades. Para más información sobre los ámbitos relacionados con paquetes para un personal access token (classic), consulta "Acerca de los permisos para los Paquetes de GitHub".

Para autenticarte en un registro del GitHub Packages dentro de un flujo de trabajo de GitHub Actions, puedes utilizar:

  • GITHUB_TOKEN para publicar los paquetes asociados con el repositorio del flujo de trabajo.
  • Un personal access token (classic) con, al menos, ámbito de read:packages para instalar los paquetes asociados con otros repositorios privados (a los cuales no puede acceder GITHUB_TOKEN).

Autenticación con un personal access token

Debes utilizar un personal access token (classic) con los ámbitos adecuados para publicar e instalar paquetes en GitHub Packages. Para obtener más información, vea «Introducción a los paquetes de GitHub».

Si quieres publicar e instalar gems, puedes configurar RubyGems o Bundler para autenticarse en GitHub Packages con tu personal access token.

Para publicar gems nuevos, debes autenticarte en GitHub Packages con RubyGems editando el archivo ~/.gem/credentials para incluir tu personal access token (classic). Cree un nuevo archivo ~/.gem/credentials si este archivo no existe.

Por ejemplo, puedes crear o editar un archivo ~/.gem/credentials para incluir lo siguiente, reemplazando TOKEN por tu personal access token.

---
:github: Bearer TOKEN

Para instalar gems, debes autenticarte en GitHub Packages actualizando tus orígenes de gems para incluir https://USERNAME:TOKEN@REGISTRY_URL/NAMESPACE/. Debes reemplazar:

  • USERNAME por su nombre de usuario de GitHub.
  • TOKEN por tu personal access token (classic).
  • NAMESPACE por el nombre de la cuenta personal u organización que posee el repositorio que contiene la gema.
  • REGISTRY_URL por la dirección URL del registro de Rubygems de la instancia. Si en la instancia se ha habilitado el aislamiento de subdominios, use rubygems.HOSTNAME. Si en la instancia se ha deshabilitado el aislamiento de subdominios, use HOSTNAME/_registry/rubygems. En cualquier caso, reemplace HOSTNAME por el nombre de host de su instancia de GitHub Enterprise Server.

Si quieres que el paquete esté disponible globalmente, puedes ejecutar el siguiente comando para agregar el registro como origen.

gem sources --add https://USERNAME:TOKEN@REGISTRY_URL/NAMESPACE/

Para la autenticación con Bundler, configúralo para que use tu personal access token (classic), reemplazando NOMBRE_DE_USUARIO por tu nombre de usuario de GitHub, TOKEN por tu personal access token y ESPACIO_DE_NOMBRES por el nombre de la cuenta personal u organización que posee el repositorio que contiene la gema. Reemplaza REGISTRY_URL por la dirección URL del registro de RubyGems de la instancia. Si en la instancia se ha habilitado el aislamiento de subdominios, use rubygems.HOSTNAME. Si en la instancia se ha deshabilitado el aislamiento de subdominios, use HOSTNAME/_registry/rubygems. En cualquier caso, reemplaza HOSTNAME por el nombre de host de tu instancia de GitHub Enterprise Server.

bundle config https://REGISTRY_URL/NAMESPACE USERNAME:TOKEN

Publicación de un paquete

De manera predeterminada, GitHub publica el paquete en un repositorio existente con el mismo nombre que el paquete. Por ejemplo, al publicar GEM_NAME en la organización octo-org, GitHub Packages publica la gema en el repositorio octo-org/GEM_NAME. Para más información sobre cómo crear la gema, consulta Creación de una gema propia en la documentación de RubyGems.

  1. Autentícate en GitHub Packages. Para obtener más información, vea "Autenticación en GitHub Packages".

  2. Compile el paquete a partir de gemspec para crear el paquete .gem. Reemplace GEM_NAME por el nombre de su gem.

    gem build GEM_NAME.gemspec
    
  3. Publica un paquete en GitHub Packages, y reemplaza NAMESPACE por el nombre de la cuenta personal u organización que posee el repositorio que contiene el proyecto y GEM_NAME por el nombre del paquete de gemas. Reemplaza REGISTRY_URL por la dirección URL del registro de RubyGems de la instancia. Si en la instancia se ha habilitado el aislamiento de subdominios, use rubygems.HOSTNAME. Si en la instancia se ha deshabilitado el aislamiento de subdominios, use HOSTNAME/_registry/rubygems. En cualquier caso, reemplaza HOSTNAME por el nombre de host de la instancia de GitHub Enterprise Server.

    Note

    El tamaño máximo sin comprimir del archivo metadata.gz de una gema debe ser menor que 2 MB. Se producirá un error en las solicitudes para insertar gemas que superen ese límite.

    $ gem push --key github \
    --host https://REGISTRY_URL/NAMESPACE \
    GEM_NAME-0.0.1.gem
    

Publicar múltiples paquetes en el mismo repositorio

Para publicar varias gemas en el mismo repositorio, puede incluir la dirección URL en el repositorio de GitHub en el campo github_repo de gem.metadata. Si incluye este campo, GitHub buscará coincidencias de repositorio con este valor en lugar de usar el nombre del gem. Reemplace HOSTNAME por el nombre de host de tu instancia de GitHub Enterprise Server.

gem.metadata = { "github_repo" => "ssh://HOSTNAME/OWNER/REPOSITORY" }

Instalación de un paquete

Puede usar gemas de GitHub Packages de forma muy similar a las gemas de rubygems.org. Debe autenticarse en GitHub Packages agregando su usuario u organización de GitHub como origen en el archivo ~/.gemrc o mediante Bundler, editando el archivo Gemfile.

  1. Autentícate en GitHub Packages. Para obtener más información, vea "Autenticación en GitHub Packages".

  2. Para Bundler, agregue su usuario u organización de GitHub como origen en el archivo Gemfile para extraer gemas de este nuevo origen. Por ejemplo, puedes agregar un nuevo bloque source al archivo Gemfile que use GitHub Packages solo para los paquetes que especifiques, y reemplazar GEM_NAME por el paquete que quieras instalar desde GitHub Packages y NAMESPACE por la cuenta personal u organización que posee el repositorio que contiene la gema que quieres instalar. Reemplaza REGISTRY_URL por la dirección URL del registro RubyGems de la instancia. Si en la instancia se ha habilitado el aislamiento de subdominios, use rubygems.HOSTNAME. Si en la instancia se ha deshabilitado el aislamiento de subdominios, use HOSTNAME/_registry/rubygems. En cualquier caso, reemplaza HOSTNAME por el nombre de host de la instancia de GitHub Enterprise Server.

    source "https://rubygems.org"
    
    gem "rails"
    
    source "https://REGISTRY_URL/NAMESPACE" do
      gem "GEM_NAME"
    end
    
  3. En el caso de las versiones de Bundler anteriores a la 1.7.0, debe agregar un nuevo source global. Para obtener más información sobre el uso de Bundler, consulte la documentación de bundler.io.

    source "https://REGISTRY_URL/NAMESPACE"
    source "https://rubygems.org"
    
    gem "rails"
    gem "GEM_NAME"
    
  4. Instala el paquete:

    gem install GEM_NAME --version "0.1.1"
    

Información adicional