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 más repositorios upstream. Un repositorio upstream puede ser un repositorio estándar o remoto de Artifact Registry.
Los otros modos del repositorio son los siguientes:
- Estándar: Es el modo de repositorio predeterminado. Subes o publicas artefactos, como paquetes privados, directamente en repositorios estándar. Si bien puedes descargar directamente desde repositorios estándar individuales, acceder a grupos de repositorios con un repositorio virtual simplifica la configuración de herramientas.
- Remoto (solo repositorios de paquetes de lenguajes): Es una caché de extracción para artefactos en repositorios públicos, como Maven Central o PyPI. Actúa como proxy para los repositorios públicos, de modo 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 comenzar
Habilita Artifact Registry, incluida la habilitación de la API de Artifact Registry y la instalación de la versión más reciente de Google Cloud CLI.
Roles requeridos
Para obtener los permisos que necesitas para administrar repositorios, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Crea repositorios virtuales y otorga acceso a repositorios individuales:
Administrador de Artifact Registry (
roles/artifactregistry.admin
) en el proyecto Google Cloud -
Otorga acceso a los repositorios a nivel del proyecto:
Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin
) en el proyecto Google Cloud -
Otorga acceso a los repositorios a nivel de la carpeta:
Administrador de carpetas (
roles/resourcemanager.folderAdmin
) en la carpeta -
Otorga acceso a los repositorios a nivel de la organización:
Administrador de la organización (
roles/resourcemanager.organizationAdmin
) en la Google Cloud organización
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Si los repositorios upstream están en otros proyectos, un administrador de los proyectos con repositorios upstream debe tener permisos para administrar el acceso a esos repositorios.
Crea repositorios upstream
Antes de configurar un repositorio virtual, crea los repositorios upstream que deseas que estén disponibles con el repositorio virtual.
Crea los repositorios upstream en la misma Google Cloudregión en la que planeas crear el repositorio virtual.
Los repositorios virtuales usan el agente de servicio de Artifact Registry para autenticarse en los repositorios upstream. Debes otorgar al agente de servicio acceso de lectura a los repositorios upstream.
Puedes otorgar el rol de lector de Artifact Registry al agente de servicio de Artifact Registry a nivel del proyecto para que no necesites otorgar acceso a repositorios upstream individuales.
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 proyecto Google Cloud con el repositorio upstream.
- VIRTUAL_REPO_PROJECT_NUMBER es el número de proyecto del proyecto Google Cloud para tu repositorio virtual.
Como alternativa, si deseas otorgar un rol con un alcance más limitado al agente de servicio, agrega el permiso
artifactregistry.repositories.readViaVirtualRepository
a un rol personalizado y, luego, otorga ese rol al agente de servicio.Para obtener más información sobre cómo otorgar permisos, consulta la documentación sobre el control de acceso.
Crea un repositorio virtual
Cuando creas un repositorio, debes configurar los siguientes parámetros que no se pueden cambiar después de crear el repositorio:
- Es el formato del artefacto.
- Modo de repositorio, si hay varios modos disponibles para el formato seleccionado.
- Ubicación del repositorio
- Encriptación con claves de encriptación propiedad de Google y administradas por Google oclaves de encriptación administradas por el cliente De forma predeterminada, Artifact Registry usa claves de encriptaciónpropiedad de Google y administradas por Google con tecnología de Google Cloud.
Artifact Registry aplica restricciones de políticas de la organización que requieren CMEK para encriptar recursos o limitar las claves de Cloud KMS que se pueden usar para la protección de CMEK.
Crea un repositorio virtual con la consola de Google Cloud
Abre la página Repositorios en la consola de Google Cloud .
Haz clic en Crear repositorio.
Especifica el nombre del repositorio. Para la ubicación de cada repositorio en un proyecto, los nombres de los repositorios deben ser únicos.
Selecciona el formato del repositorio.
En Modo de repositorio, selecciona Virtual.
En Upstreams de repositorio virtual, haz clic en Agregar upstream para agregar 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 Google Cloud diferente.
- 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 prioridad sobre los valores más bajos. Deja espacio entre los valores de prioridad para que haya flexibilidad para agregar repositorios upstream con prioridades que se encuentren entre los valores existentes.
En Tipo de ubicación, elige la ubicación para el repositorio:
Elige el tipo de ubicación: Región o Multirregión. La lista de ubicaciones cambia para reflejar tu selección.
En la lista Región o Multirregión, selecciona una ubicación.
Para obtener información sobre los tipos de ubicación y sobre las ubicaciones compatibles, consulta Ubicaciones de repositorios.
Agrega una descripción para el repositorio. Las descripciones ayudan a identificar el propósito del repositorio y el tipo de artefactos que contiene.
No incluyas datos sensibles, ya que las descripciones de los repositorios no están encriptadas.
Si deseas usar etiquetas para organizar tus repositorios, haz clic en Agregar etiqueta y, luego, ingresa el par clave-valor de la etiqueta. Puedes agregar, editar o quitar etiquetas después de crear el repositorio.
En la sección Encryption, elige el mecanismo de encriptación para el repositorio.
- Google-managed encryption key: Encripta el contenido del repositorio con un Google-owned and Google-managed encryption key.
- Clave administrada por el cliente: Encripta el contenido de un repositorio mediante una clave que controlas a través de Cloud Key Management Service. Si deseas obtener instrucciones para la configuración de claves, consulta Configura CMEK para repositorios.
Haz clic en Crear.
Artifact Registry crea el repositorio y lo agrega a la lista de repositorios.
Después de crear el repositorio, haz lo siguiente:
- Otorga acceso al repositorio.
Configura Docker, los administradores de paquetes y otros clientes de terceros para que se autentiquen en los repositorios.
Crea un repositorio virtual con gcloud CLI
Para crear un repositorio virtual, debes definir tus repositorios upstream en un archivo de política y, luego, crear el repositorio con ese archivo.
Crea un archivo de política upstream en formato JSON con los siguientes parámetros de configuración:
[{ "id" : "POLICY_ID", "repository" : "UPSTREAM_REPOSITORY_RESOURCE_NAME", "priority" : PRIORITY }, {...}]
POLICY_ID
es un nombre para 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 en 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 Google Cloud diferente.
- 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 prioridad sobre los valores más bajos.
En el siguiente ejemplo, se muestra un archivo de política llamado
policies.json
con cuatro repositorios upstream.upstream1
tiene el valor más alto parapriority
, por lo que Artifact Registry lo buscará primero.upstream-test
tiene el valor depriority
más bajo, por lo que Artifact Registry lo buscará en último lugar.upstream2
yupstream3
tienen la misma prioridad. Si Artifact Registry encuentra un paquete solicitado en repositorios con la misma prioridad, puede entregar 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 espacios proporcionan flexibilidad para agregar repositorios upstream con prioridades que se encuentran entre los valores existentes. Por ejemplo, puedes agregar un repositorio
upstream-3
con una prioridad de70
para que Artifact Registry lo busque antes queupstream-test
.Considera almacenar tu archivo de política upstream en tu sistema de control de código fuente para que puedas reutilizarlo más adelante y realizar cambios en la configuración del repositorio upstream, así como hacer un seguimiento de los cambios históricos.
En el directorio con tu 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
Reemplaza lo siguiente:
VIRTUAL-REPOSITORY-NAME
es el nombre del repositorio virtual.PROJECT_ID
es el ID del proyecto en el que crearás el repositorio virtual. Si se omite esta marca, se usa el proyecto actual o predeterminado.FORMAT
es el formato del repositorio. Los siguientes valores están disponibles: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 estableces un valor predeterminado. Para ver una lista de las ubicaciones compatibles, 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 encriptadas.UPSTREAM_POLICY_FILE
es la ruta de acceso a un archivo de política upstream.
Por ejemplo, el siguiente comando crea un repositorio virtual llamado
virtual-repo
para paquetes de Python en la regiónus-west1
con la configuración enpolicies.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.
Crea un repositorio virtual con Terraform
Usa el recurso google_artifact_registry_repository para crear repositorios.
Se requiere la versión 5.0.0
o una posterior de terraform-provider-google
.
Si es la primera vez que usas Terraform para Google Cloud, consulta la página Comenzar con Google Cloud en el sitio web de HashiCorp.
En el siguiente ejemplo, se definen el proveedor, un repositorio virtual con el nombre del recurso de Terraform my-repo
y un repositorio upstream con el nombre del 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 ID del proyecto Google Cloud .
- UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el upstream deben estar en la misma región o en varias regiones.
- 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 encriptadas.
- KEY es el nombre de la clave de Cloud Key Management Service, si usas claves de encriptación administradas por el cliente (CMEK) para la encriptación. Omite este argumento para usar la configuración predeterminada,las claves de encriptación propiedad de Google y administradas por Google .
- PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen precedencia en el orden de extracción.
Maven
Si no especificas una política de versiones, Artifact Registry crea un repositorio de Maven que almacena tanto las versiones de instantáneas como las de lanzamiento 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 ID del proyecto Google Cloud .
- UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el upstream deben estar en la misma región o en varias regiones.
- 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 encriptadas.
- KEY es el nombre de la clave de Cloud Key Management Service, si usas claves de encriptación administradas por el cliente (CMEK) para la encriptación. Omite este argumento para usar la configuración predeterminada,las claves de encriptación propiedad de Google y administradas por Google .
- PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen precedencia en el orden de extracción.
Para almacenar versiones de actualización y de instantáneas en diferentes repositorios, especifica una política de versiones para el repositorio con un bloque maven_config
. Este bloque admite los siguientes parámetros de configuración:
version_policy
establece la política de versiones con uno de los siguientes valores:VERSION_POLICY_UNSPECIFIED
: Almacena paquetes de versiones y de instantáneas. Esta es la configuración predeterminada.- RELEASE: Almacena solo los paquetes de lanzamiento.
- SNAPSHOT: Almacena solo paquetes de instantáneas.
allow_snapshot_overwrites
configura un repositorio con una política de versionesSNAPSHOT
para aceptar instantáneas no únicas que reemplacen 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 ID del proyecto Google Cloud .
- UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el upstream deben estar en la misma región o en varias regiones.
- 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 encriptadas.
- KEY es el nombre de la clave de Cloud Key Management Service, si usas claves de encriptación administradas por el cliente (CMEK) para la encriptación. Omite este argumento para usar la configuración predeterminada,las claves de encriptación propiedad de Google y administradas por Google .
- PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen precedencia 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 ID del proyecto Google Cloud .
- UPSTREAM_LOCATION es la ubicación del repositorio upstream. Ten en cuenta que el repositorio virtual y el upstream deben estar en la misma región o en varias regiones.
- 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 encriptadas.
- KEY es el nombre de la clave de Cloud Key Management Service, si usas claves de encriptación administradas por el cliente (CMEK) para la encriptación. Omite este argumento para usar la configuración predeterminada,las claves de encriptación propiedad de Google y administradas por Google .
- PRIORITY es el valor de prioridad opcional. La prioridad más alta es 1. Las entradas con un valor de prioridad mayor tienen precedencia en el orden de extracción.
Artifact Registry crea tu repositorio. Ejecuta el siguiente comando para ver una descripción del repositorio:
gcloud artifacts repositories describe REPOSITORY \
--location=LOCATION
Después de crear el repositorio, haz lo siguiente:
- Otorga acceso al repositorio.
Configura Docker, los administradores de paquetes y otros clientes de terceros para que se autentiquen en los repositorios.
Actualiza los repositorios upstream
Puedes cambiar la lista de repositorios upstream o ajustar su prioridad.
Console
Abre la página Repositorios en la consola de Google Cloud .
En la lista de repositorios, selecciona el repositorio virtual y haz clic en Editar repositorio.
En la lista Virtual Repository Upstream, realiza los cambios necesarios. Puedes agregar y quitar repositorios, o cambiar la prioridad de los repositorios en la lista.
Haz clic en Guardar.
gcloud
Edita tu archivo de política upstream con los cambios. Por ejemplo, es posible que desees agregar un repositorio upstream o ajustar la configuración de prioridad.
Si deseas quitar todos los repositorios upstream, tu archivo de política debe contener un conjunto vacío de repositorios.
[]
Ejecuta el siguiente comando para aplicar los cambios al repositorio virtual.
gcloud artifacts repositories update REPOSITORY \ --upstream-policy-file=UPSTREAM_POLICY_FILE
Reemplaza
UPSTREAM_POLICY_FILE
por la ruta de acceso al archivo de política upstream.Para obtener más información sobre el comando, consulta la documentación de referencia de gcloud artifacts repositories update.
Cómo editar las descripciones de los repositorios
Puedes cambiar la descripción del repositorio desde la consola de Google Cloud o gcloud CLI.
Console
Abre la página Repositorios en la consola de Google Cloud .
En la lista de repositorios, selecciona el repositorio y haz clic en Editar repositorio.
Edita la descripción del repositorio y, luego, 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"
Reemplaza lo siguiente:
REPOSITORY
: Es el nombre del repositorio. Si configuraste un repositorio predeterminado, puedes omitir esta marca para usarlo.PROJECT
: El ID del proyecto de Google Cloud. Si se omite esta marca, se usa el proyecto actual o predeterminado.-
LOCATION
es la ubicación regional o multirregional del repositorio. Usa esta marca para ver los repositorios en una ubicación específica. Si configuraste una ubicación predeterminada, puedes omitir esta marca para usarla. DESCRIPTION
: Es una descripción del repositorio.