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.

GitHub Packages está disponible con GitHub Free, GitHub Pro, GitHub Free para organizaciones, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 3.0 o superior y GitHub AE. Para obtener más información sobre cómo actualizar la instancia GitHub Enterprise Server, consulta «Acerca de las actualizaciones a nuevas versiones» y el Asistente de mejora para encontrar la ruta de actualización de la versión actual.

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

Prerrequisitos

  • 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
  • Instala keycutter para administrar múltiples credenciales. Para instalar keycutter:

    $ gem install keycutter

Autenticar a GitHub Packages

You need an access token to publish, install, and delete private, internal, and public packages.

You can use a personal access token (PAT) to authenticate to GitHub Packages or the GitHub Enterprise Server API. When you create a personal access token, you can assign the token different scopes depending on your needs. For more information about packages-related scopes for a PAT, see "About permissions for GitHub Packages."

To authenticate to a GitHub Packages registry within a GitHub Actions workflow, you can use:

  • GITHUB_TOKEN to publish packages associated with the workflow repository.
  • a PAT with at least packages:read scope to install packages associated with other private repositories (which GITHUB_TOKEN can't access).

Para más información sobre el uso de GITHUB_TOKEN en flujos de trabajo de GitHub Actions, vea "Autenticación en un flujo de trabajo".

Autenticarte con un token de acceso personal

Debes utilizar un token de acceso personal con los alcances adecuados para publicar e instalar paquetes en GitHub Packages. Para más información, vea "Acerca de GitHub Packages".

Puede autenticarse en GitHub Packages con RubyGems editando el archivo ~/.gem/credentials para publicar gemas, editando el archivo ~/.gemrc para instalar una única gema única o usando Bundler para rastrear e instalar una o más gemas.

Para publicar gemas nuevas, debe autenticarse en GitHub Packages con RubyGems editando el archivo ~/.gem/credentials para incluir su token de acceso personal. Cree un nuevo archivo ~/.gem/credentials si este archivo no existe.

Por ejemplo, puede crear o editar un archivo ~/.gem/credentials para incluir lo siguiente, reemplazando TOKEN por el token de acceso personal.

---
:github: Bearer TOKEN

Para instalar gemas, debe autenticarse en GitHub Packages editando el archivo ~/.gemrc para que el proyecto incluya https://USERNAME:TOKEN@REGISTRY-URL/OWNER/. Debes reemplazar:

  • USERNAME por su nombre de usuario de GitHub.
  • TOKEN por el token de acceso personal.
  • OWNER por el nombre de la cuenta de usuario o de organización a la que pertenece el repositorio que contiene el proyecto.
  • 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 no tiene un archivo ~/.gemrc, cree un nuevo archivo ~/.gemrc consultando este ejemplo.

---
:backtrace: false
:bulk_threshold: 1000
:sources:
- https://rubygems.org/
- https://USERNAME:TOKEN@REGISTRY-URL/OWNER/
:update_sources: true
:verbose: true  

Para autenticarse con Bundler, configúrelo para que use el token de acceso personal, reemplazando USERNAME por el nombre de usuario de GitHub, TOKEN por su token de acceso personal y OWNER por el nombre de la cuenta de usuario u organización que posea el repositorio que contiene el proyecto. Reemplace 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.

$ bundle config https://REGISTRY-URL/OWNER USERNAME:TOKEN

Publicación de un paquete

Predeterminadamente, GitHub publica el paquete en un repositorio existente con el mismo nombre que éste. Por ejemplo, al publicar octo-gem en la organización octo-org, GitHub Packages publica la gema en el repositorio de octo-org/octo-gem. Para obtener más información sobre cómo crear la gema, consulte "Crear su propia gema" en la documentación de RubyGems.

Después de que publiques un paquete, puedes verlo en GitHub. Para más información, vea "Visualización de paquetes".

  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.

    gem build OCTO-GEM.gemspec
  3. Publique un paquete en GitHub Packages, reemplazando OWNER por el nombre de la cuenta de usuario u organización que posee el repositorio que contiene el proyecto y OCTO-GEM por el nombre del paquete de gemas. Reemplace 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.

    $ gem push --key github \
    --host https://REGISTRY-URL/OWNER \
    OCTO-GEM-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 en función de este valor en vez de utilizar el nombre de la gema. Reemplace HOSTNAME por el nombre de host de your GitHub Enterprise Server instance.

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, puede agregar un nuevo bloque de source al archivo Gemfile que use GitHub Packages solo para los paquetes que especifique, reemplazando GEM NAME por el paquete que desea instalar desde GitHub Packages y OWNER por el usuario u organización que posee el repositorio que contiene la gema que desea instalar. Reemplace 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, reemplace HOSTNAME por el nombre de host de su instancia de GitHub Enterprise Server.

    source "https://rubygems.org"
    
    gem "rails"
    
    source "https://REGISTRY-URL/OWNER" 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/OWNER"
    source "https://rubygems.org"
    
    gem "rails"
    gem "GEM NAME"
    
  4. Instala el paquete:

    $ gem install octo-gem --version "0.1.1"

Información adicional