Crear repositorios virtuales

En esta página se describe cómo crear repositorios virtuales de Artifact Registry.

Los repositorios virtuales actúan como un único punto de acceso para descargar, instalar o implementar artefactos en el mismo formato desde uno o varios repositorios de upstream. Un repositorio upstream puede ser un repositorio estándar o remoto de Artifact Registry.

Los otros modos de repositorio son los siguientes:

  • Estándar: es el modo de repositorio predeterminado. Puedes subir o publicar artefactos, como paquetes privados, directamente en repositorios estándar. Aunque puedes descargar directamente desde repositorios estándar individuales, acceder a grupos de repositorios con un repositorio virtual simplifica la configuración de las herramientas.
  • Remoto: (solo repositorios de paquetes de lenguaje): una caché de extracción para artefactos de repositorios públicos, como Maven Central o PyPI. Actúa como proxy de los repositorios públicos para que tengas más control sobre tus dependencias externas.

Para obtener más información sobre cómo funcionan los repositorios virtuales, consulta la descripción general de los repositorios virtuales.

Antes de empezar

Habilita Artifact Registry, lo que incluye habilitar la API de Artifact Registry e instalar la versión más reciente de la CLI de Google Cloud.

Roles obligatorios

Para obtener los permisos que necesitas para gestionar repositorios, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Si los repositorios upstream están en otros proyectos, un administrador de los proyectos con repositorios upstream debe tener permisos para gestionar el acceso a esos repositorios.

Crear repositorios upstream

Antes de configurar un repositorio virtual, crea los repositorios upstream que quieras que estén disponibles con el repositorio virtual.

  1. Crea los repositorios upstream en la misma región Google Cloud en la que tienes previsto crear el repositorio virtual.

  2. Los repositorios virtuales usan el agente de servicio de Artifact Registry para autenticarse en los repositorios upstream. Debes conceder al agente de servicio acceso de lectura a los repositorios upstream.

    Puede conceder el rol Lector de Artifact Registry al agente de servicio de Artifact Registry a nivel de proyecto para no tener que conceder acceso a repositorios upstream concretos.

    En cada proyecto con repositorios upstream, ejecuta el siguiente comando:

    gcloud projects add-iam-policy-binding UPSTREAM_PROJECT_ID \
        --member serviceAccount:service-VIRTUAL-REPO-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role roles/artifactregistry.reader
    

    Dónde

    • UPSTREAM_PROJECT_ID es el ID del Google Cloud proyecto con el repositorio upstream.
    • VIRTUAL_REPO_PROJECT_NUMBER es el número de proyecto del Google Cloud proyecto de tu repositorio virtual.

    También puedes asignar un rol con un ámbito más limitado al agente de servicio. Para ello, añade el permiso artifactregistry.repositories.readViaVirtualRepository a un rol personalizado y, a continuación, asigna ese rol al agente de servicio.

    Para obtener más información sobre cómo conceder permisos, consulta la documentación sobre control de acceso.

Crear un repositorio virtual

Cuando creas un repositorio, debes configurar los siguientes ajustes, que no se pueden cambiar una vez creado el repositorio:

  • Formato del artefacto.
  • Modo de repositorio, si hay varios modos disponibles para el formato seleccionado.
  • Ubicación del repositorio.
  • Cifrado con claves de cifrado basadas en Google Cloud o con claves de cifrado gestionadas por el cliente. De forma predeterminada, Artifact Registry usa claves de cifrado con tecnología de Google Cloud.

Artifact Registry aplica restricciones de políticas de la organización que requieren que se usen CMEK para cifrar recursos o que limitan las claves de Cloud KMS que se pueden usar para la protección con CMEK.

Crear un repositorio virtual con la consola de Google Cloud

  1. Abre la página Repositorios en la consola de Google Cloud .

    Abre la página Repositorios.

  2. Haz clic en Crear repositorio.

  3. Especifica el nombre del repositorio. Los nombres de los repositorios deben ser únicos en cada ubicación de repositorio de un proyecto.

  4. Selecciona el formato del repositorio.

  5. En Modo de repositorio, selecciona Virtual.

  6. En Virtual Repository Upstreams (Repositorios virtuales upstream), haz clic en Add Upstream (Añadir upstream) para añadir un repositorio upstream.

    • Un repositorio upstream puede ser un repositorio estándar, remoto o virtual.
    • Un repositorio upstream debe estar en la misma ubicación que el repositorio virtual, pero puede estar en un proyecto diferente. Google Cloud
    • Un repositorio upstream debe tener el mismo formato de artefacto que el repositorio virtual.

    Especifica una prioridad y un nombre de política para cada repositorio upstream. Los valores de prioridad más altos tienen preferencia sobre los más bajos. Deja espacio entre los valores de prioridad para poder añadir repositorios upstream con prioridades intermedias.

  7. En Location Type (Tipo de ubicación), elige la ubicación del repositorio:

    1. Elige el tipo de ubicación: región o multirregión. La lista de ubicaciones cambiará para reflejar tu selección.

    2. En la lista Región o Multirregión, selecciona una ubicación.

    Para obtener información sobre los tipos de ubicaciones y las ubicaciones admitidas, consulta Ubicaciones de repositorios.

  8. Añade una descripción del repositorio. Las descripciones ayudan a identificar la finalidad del repositorio y el tipo de artefactos que contiene.

    No incluyas datos sensibles, ya que las descripciones de los repositorios no están cifradas.

  9. Si quieres usar etiquetas para organizar tus repositorios, haz clic en Añadir etiqueta e introduce el par clave-valor de la etiqueta. Puedes añadir, editar o quitar etiquetas después de crear el repositorio.

  10. En la sección Cifrado, elige el mecanismo de cifrado del repositorio.

    • Google-managed encryption key: cifra el contenido del repositorio con Google-owned and Google-managed encryption key.
    • Clave gestionada por el cliente: encripta el contenido del repositorio con una clave que controlas a través de Cloud Key Management Service. Para obtener instrucciones sobre cómo configurar las claves, consulta el artículo Configurar claves de cifrado gestionadas por el cliente para repositorios.
  11. Haz clic en Crear.

Artifact Registry crea el repositorio y lo añade a la lista de repositorios.

Una vez que hayas creado el repositorio, haz lo siguiente:

Crear un repositorio virtual con la CLI de gcloud

Para crear un repositorio virtual, define tus repositorios upstream en un archivo de política y, a continuación, crea el repositorio con ese archivo.

  1. Crea un archivo de política upstream en formato JSON con los siguientes ajustes:

    [{
    "id" : "POLICY_ID",
    "repository" : "UPSTREAM_REPOSITORY_RESOURCE_NAME",
    "priority" : PRIORITY
    }, {...}]
    
    • POLICY_ID es el nombre de la política. Cada repositorio upstream de la política debe tener un ID de política único.
    • UPSTREAM_REPO_RESOURCE_NAME es el nombre del repositorio upstream con el siguiente formato:

      projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY
      
      • Un repositorio upstream puede ser un repositorio estándar, remoto o virtual.
      • Un repositorio upstream debe estar en la misma ubicación que el repositorio virtual, pero puede estar en un proyecto diferente. Google Cloud
      • Un repositorio upstream debe tener el mismo formato de artefacto que el repositorio virtual.
    • PRIORITY es un número entero que indica la prioridad del repositorio upstream. Los valores de prioridad más altos tienen preferencia sobre los más bajos.

    En el siguiente ejemplo se muestra un archivo de políticas llamado policies.json con cuatro repositorios upstream. upstream1 tiene el valor más alto de priority, por lo que Artifact Registry lo buscará primero. upstream-test tiene el valor priority más bajo, por lo que Artifact Registry lo buscará en último lugar. upstream2 y upstream3 tienen la misma prioridad. Si Artifact Registry encuentra un paquete solicitado en repositorios con la misma prioridad, puede proporcionar el paquete desde cualquiera de los repositorios.

    [{
    "id" : "upstream1",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo1",
    "priority" : 100
    }, {
    "id" : "upstream2",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo2",
    "priority" : 80
    }, {
    "id" : "upstream3",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-repo2",
    "priority" : 80
    }, {
    "id" : "upstream-test",
    "repository" : "projects/myproject/locations/us-west1/repositories/python-test-repo",
    "priority" : 20
    }]
    

    En este ejemplo también se deja espacio entre los valores de prioridad. Estos huecos ofrecen flexibilidad para añadir repositorios upstream con prioridades que se encuentren entre los valores ya definidos. Por ejemplo, puedes añadir un upstream-3 repositorio con una prioridad de 70 para que Artifact Registry lo busque antes que upstream-test.

    Te recomendamos que almacenes el archivo de políticas upstream en tu sistema de control de código fuente para poder reutilizarlo más adelante y hacer cambios en la configuración del repositorio upstream, así como para monitorizar los cambios históricos.

  2. En el directorio que contiene el archivo de política upstream, ejecuta el siguiente comando para crear el repositorio virtual:

    gcloud artifacts repositories create VIRTUAL-REPOSITORY-NAME \
        --project=PROJECT_ID \
        --repository-format=FORMAT \
        --mode=virtual-repository \
        --location=LOCATION \
        --description="DESCRIPTION" \
        --upstream-policy-file=UPSTREAM_POLICY_FILE
    

    Haz los cambios siguientes:

    • VIRTUAL-REPOSITORY-NAME es el nombre del repositorio virtual.
    • PROJECT_ID es el ID del proyecto en el que vas a crear el repositorio virtual. Si se omite esta marca, se usará el proyecto actual o predeterminado.
    • FORMAT es el formato del repositorio. Están disponibles los siguientes valores:
      • apt (vista previa privada)
      • docker
      • go
      • maven
      • npm
      • python
      • yum (vista previa privada)
    • LOCATION es la ubicación regional o multirregional del repositorio. Puedes omitir esta marca si defines un valor predeterminado. Para ver una lista de las ubicaciones admitidas, ejecuta el siguiente comando:

      gcloud artifacts locations list
      
    • DESCRIPTION es una descripción opcional del repositorio. No incluyas datos sensibles, ya que las descripciones de los repositorios no están cifradas.

    • UPSTREAM_POLICY_FILE es la ruta al archivo de la política upstream.

    Por ejemplo, el siguiente comando crea un repositorio virtual llamado virtual-repo para paquetes de Python en la región us-west1 con la configuración de policies.json.

    gcloud artifacts repositories create virtual-repo \
    --repository-format=python \
    --mode=virtual-repository \
    --location=us-west1 \
    --description="Python virtual repository" \
    --upstream-policy-file=policies.json
    

Artifact Registry crea el repositorio virtual.

Crear un repositorio virtual con Terraform

Usa el recurso google_artifact_registry_repository para crear repositorios. Se requiere la versión terraform-provider-google 5.0.0 o una posterior.

Si no has usado Terraform para Google Cloud, consulta la página Empezar Google Cloud del sitio web de HashiCorp.

En el siguiente ejemplo se define el proveedor, un repositorio virtual con el nombre de recurso de Terraform my-repo y un repositorio upstream con el nombre de recurso de Terraform my-repo-upstream.

Docker

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "docker"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "docker"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dónde

  • PROJECT-ID es el Google Cloud ID del proyecto.
  • UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el repositorio upstream deben estar en la misma región o multirregión.
  • UPSTREAM_REPOSITORY_ID es el ID del repositorio upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION es la descripción opcional del repositorio upstream.
  • LOCATION es la ubicación del repositorio virtual.
  • REPOSITORY_ID es el ID del repositorio virtual.
  • DESCRIPTION es la descripción opcional del repositorio virtual. No incluyas datos sensibles, ya que las descripciones de los repositorios no están cifradas.
  • KEY es el nombre de la clave de Cloud Key Management Service si usas claves de cifrado gestionadas por el cliente (CMEK) para el cifrado. Omite este argumento para usar la configuración predeterminada: gestionadas y propiedad de Google con tecnología de Google Cloud.
  • PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen prioridad en el orden de extracción.

Maven

Si no especificas una política de versiones, Artifact Registry creará un repositorio de Maven que almacene tanto versiones de lanzamiento como de snapshot de los paquetes de forma predeterminada.

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "maven"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "maven"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dónde

  • PROJECT-ID es el Google Cloud ID del proyecto.
  • UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el repositorio upstream deben estar en la misma región o multirregión.
  • UPSTREAM_REPOSITORY_ID es el ID del repositorio upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION es la descripción opcional del repositorio upstream.
  • LOCATION es la ubicación del repositorio virtual.
  • REPOSITORY_ID es el ID del repositorio virtual.
  • DESCRIPTION es la descripción opcional del repositorio virtual. No incluyas datos sensibles, ya que las descripciones de los repositorios no están cifradas.
  • KEY es el nombre de la clave de Cloud Key Management Service si usas claves de cifrado gestionadas por el cliente (CMEK) para el cifrado. Omite este argumento para usar la configuración predeterminada: gestionadas y propiedad de Google con tecnología de Google Cloud.
  • PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen prioridad en el orden de extracción.

Para almacenar versiones de lanzamiento y de instantánea en repositorios diferentes, especifica una política de versiones para el repositorio mediante un bloque maven_config. Este bloque admite los siguientes ajustes:

  • version_policy define la política de versiones con uno de los siguientes valores:
    • VERSION_POLICY_UNSPECIFIED: almacena la captura y los paquetes de lanzamiento. Esta es la opción predeterminada.
    • RELEASE: solo paquetes de lanzamiento de la tienda.
    • SNAPSHOT: almacena solo los paquetes de la captura.
  • allow_snapshot_overwrites configura un repositorio con una política de versiones SNAPSHOT para aceptar snapshots no únicos que sobrescriban las versiones existentes en el repositorio.

En el siguiente ejemplo se define un repositorio de Maven con una política de versiones de lanzamiento.

provider "google" {
project = "my-project"
}

resource "google_artifact_registry_repository" "my-repo" {
provider = google-beta

location = "us-central1"
repository_id = "my-repo"
description = "Maven repository"
format = "MAVEN"
maven_config {
  version_policy = "RELEASE"
}
}

npm

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "npm"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "npm"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dónde

  • PROJECT-ID es el Google Cloud ID del proyecto.
  • UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el repositorio upstream deben estar en la misma región o multirregión.
  • UPSTREAM_REPOSITORY_ID es el ID del repositorio upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION es la descripción opcional del repositorio upstream.
  • LOCATION es la ubicación del repositorio virtual.
  • REPOSITORY_ID es el ID del repositorio virtual.
  • DESCRIPTION es la descripción opcional del repositorio virtual. No incluyas datos sensibles, ya que las descripciones de los repositorios no están cifradas.
  • KEY es el nombre de la clave de Cloud Key Management Service si usas claves de cifrado gestionadas por el cliente (CMEK) para el cifrado. Omite este argumento para usar la configuración predeterminada: gestionadas y propiedad de Google con tecnología de Google Cloud.
  • PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen prioridad en el orden de extracción.

Python

provider "google" {
    project = "PROJECT-ID"
}
resource "google_artifact_registry_repository" "my-repo-upstream" {
  location      = "UPSTREAM_LOCATION"
  repository_id = "UPSTREAM_REPOSITORY_ID"
  description   = "UPSTREAM_REPOSITORY_DESCRIPTION"
  format        = "python"
}

resource "google_artifact_registry_repository" "my-repo" {
  depends_on    = []
  location      = "LOCATION"
  repository_id = "REPOSITORY_ID"
  description   = "VIRTUAL_REPOSITORY_DESCRIPTION"
  format        = "python"
  kms_key_name = "KEY"
  mode          = "VIRTUAL_REPOSITORY"
  virtual_repository_config {
    upstream_policies {
      id          = "UPSTREAM_REPOSITORY_ID"
      repository  = google_artifact_registry_repository.my-repo-upstream.id
      priority    = PRIORITY
    }
  }
}

Dónde

  • PROJECT-ID es el Google Cloud ID del proyecto.
  • UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el repositorio upstream deben estar en la misma región o multirregión.
  • UPSTREAM_REPOSITORY_ID es el ID del repositorio upstream.
  • UPSTREAM_REPOSITORY_DESCRIPTION es la descripción opcional del repositorio upstream.
  • LOCATION es la ubicación del repositorio virtual.
  • REPOSITORY_ID es el ID del repositorio virtual.
  • DESCRIPTION es la descripción opcional del repositorio virtual. No incluyas datos sensibles, ya que las descripciones de los repositorios no están cifradas.
  • KEY es el nombre de la clave de Cloud Key Management Service si usas claves de cifrado gestionadas por el cliente (CMEK) para el cifrado. Omite este argumento para usar la configuración predeterminada: gestionadas y propiedad de Google con tecnología de Google Cloud.
  • PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen prioridad en el orden de extracción.

Artifact Registry crea el repositorio. Ejecuta el siguiente comando para ver una descripción del repositorio:

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

Una vez que hayas creado el repositorio, haz lo siguiente:

Actualizar repositorios upstream

Puedes cambiar la lista de repositorios upstream o ajustar la prioridad de los repositorios upstream.

Consola

  1. Abre la página Repositorios en la consola de Google Cloud .

    Abre la página Repositorios.

  2. En la lista de repositorios, selecciona el repositorio virtual y haz clic en Editar repositorio.

  3. En la lista Virtual Repository Upstream, haz los cambios necesarios. Puede añadir y quitar repositorios, o cambiar la prioridad de los repositorios de la lista.

  4. Haz clic en Guardar.

gcloud

  1. Edita el archivo de políticas upstream con los cambios que quieras. Por ejemplo, puede que quieras añadir un repositorio upstream o ajustar la configuración de prioridad.

    Si quieres eliminar todos los repositorios upstream, tu archivo de política debe contener un conjunto de repositorios vacío.

    []
    
  2. Ejecuta el siguiente comando para aplicar los cambios al repositorio virtual.

    gcloud artifacts repositories update REPOSITORY \
        --upstream-policy-file=UPSTREAM_POLICY_FILE
    

    Sustituye UPSTREAM_POLICY_FILE por la ruta al archivo de políticas upstream.

    Para obtener más información sobre el comando, consulta la documentación de referencia de gcloud artifacts repositories update.

Editar descripciones de repositorios

Puedes cambiar la descripción del repositorio desde la Google Cloud consola o la CLI de gcloud.

Consola

  1. Abre la página Repositorios en la consola de Google Cloud .

    Abre la página Repositorios.

  2. En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.

  3. Edita la descripción del repositorio y haz clic en Guardar.

gcloud

Para actualizar la descripción del repositorio, ejecuta el siguiente comando:

gcloud artifacts repositories update REPOSITORY \
    --project=PROJECT \
    --location=LOCATION \
    --description="DESCRIPTION"

Haz los cambios siguientes:

  • REPOSITORY: el nombre del repositorio. Si has configurado un repositorio predeterminado, puedes omitir esta marca para usar el predeterminado.
  • PROJECT: el ID del proyecto. Google Cloud Si se omite esta marca, se usará el proyecto actual o el predeterminado.
  • LOCATION es la ubicación regional o multirregional del repositorio. Usa esta marca para ver los repositorios de una ubicación específica. Si has configurado una ubicación predeterminada, puedes omitir esta marca para usarla.
  • DESCRIPTION: una descripción del repositorio.