Esta página descreve como criar repositórios virtuais do Artifact Registry.
Os repositórios virtuais atuam como um único ponto de acesso para fazer o download, instalar ou implantar artefatos no mesmo formato de um ou mais repositórios upstream. Um repositório upstream pode ser um repositório padrão ou remoto do Artifact Registry.
Os outros modos de repositório são:
- Padrão: o modo de repositório padrão. Você faz upload ou publica artefatos, como pacotes particulares, diretamente em repositórios padrão. Embora seja possível fazer o download diretamente de repositórios padrão individuais, acessar grupos de repositórios com um repositório virtual simplifica a configuração da ferramenta.
- Remoto (somente repositórios de pacotes de linguagem): um cache de pull-through para artefatos em repositórios públicos, como Maven Central ou PyPI. Ele funciona como um proxy para os repositórios públicos, permitindo que você tenha mais controle sobre suas dependências externas.
Para mais informações sobre como os repositórios virtuais funcionam, consulte a Visão geral dos repositórios virtuais.
Antes de começar
Ative o Artifact Registry, incluindo a ativação daAPI Artifact Registryy e a instalação da versão mais recente da Google Cloud CLI.
Funções exigidas
Para conseguir as permissões necessárias para gerenciar repositórios, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Crie repositórios virtuais e conceda acesso a repositórios individuais:
Administrador do Artifact Registry (
roles/artifactregistry.admin
) no projeto Google Cloud -
Conceder acesso a repositórios no nível do projeto:
Administrador do IAM do projeto (
roles/resourcemanager.projectIamAdmin
) no projeto Google Cloud -
Conceder acesso a repositórios no nível da pasta:
Administrador de pastas (
roles/resourcemanager.folderAdmin
) na pasta -
Conceder acesso a repositórios no nível da organização:
Administrador da organização (
roles/resourcemanager.organizationAdmin
) na organização Google Cloud
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Se os repositórios upstream estiverem em outros projetos, um administrador nos projetos com repositórios upstream precisará ter permissões para gerenciar o acesso a eles.
Criar repositórios upstream
Antes de configurar um repositório virtual, crie os repositórios upstream que você quer disponibilizar com ele.
Crie os repositórios upstream na mesma região Google Cloudem que você planeja criar o repositório virtual.
Os repositórios virtuais usam o agente de serviço do Artifact Registry para autenticar em repositórios upstream. Você precisa conceder ao agente de serviço acesso de leitura aos repositórios upstream.
É possível conceder o papel de leitor do Artifact Registry ao agente de serviço do Artifact Registry no nível do projeto para não precisar conceder acesso a repositórios upstream individuais.
Em cada projeto com repositórios upstream, execute o seguinte 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
Onde
- UPSTREAM_PROJECT_ID é o ID do Google Cloud projeto com o repositório upstream.
- VIRTUAL_REPO_PROJECT_NUMBER é o número do projeto do projeto Google Cloud para seu repositório virtual.
Como alternativa, se você quiser conceder um papel com escopo mais restrito ao agente de serviço, adicione a permissão
artifactregistry.repositories.readViaVirtualRepository
a um papel personalizado e conceda esse papel ao agente de serviço.Para mais informações sobre como conceder permissões, consulte a documentação de controle de acesso.
Criar um repositório virtual
Ao criar um repositório, é preciso configurar as seguintes opções, que não podem ser alteradas depois da criação:
- Formato do artefato.
- Modo de repositório, se vários modos estiverem disponíveis para o formato selecionado.
- Local do repositório.
- Criptografia com chaves de criptografia do Google Cloud ou gerenciadas pelo cliente. O Artifact Registry usa chaves de criptografiacom tecnologia do Google Cloud por padrão.
O Artifact Registry aplica restrições de política da organização que exigem a CMEK para criptografar recursos ou limitar quais chaves do Cloud KMS podem ser usadas para proteção por CMEK.
Criar um repositório virtual usando o console Google Cloud
Abra a página Repositórios no console do Google Cloud .
Clique em Criar repositório.
Especifique o nome do repositório. Para cada local de repositório em um projeto, os nomes dos repositórios precisam ser exclusivos.
Selecione o formato do repositório.
Em Modo de repositório, selecione Virtual.
Em Upstreams de repositório virtual, clique em Adicionar upstream para adicionar um repositório upstream.
- Um repositório upstream pode ser padrão, remoto ou virtual.
- Um repositório upstream precisa estar no mesmo local que o repositório virtual, mas pode estar em um Google Cloud projeto diferente.
- Um repositório upstream precisa ter o mesmo formato de artefato que o repositório virtual.
Especifique uma prioridade e um nome de política para cada repositório upstream. Valores de prioridade mais alta têm precedência sobre valores mais baixos. Deixe espaço entre os valores de prioridade para ter flexibilidade ao adicionar repositórios upstream com prioridades intermediárias.
Em Tipo de local, escolha o local do repositório:
Escolha o tipo de local: Região ou multirregião. A lista de locais muda para refletir a seleção.
Na lista Região ou Multirregião, selecione um local.
Para informações sobre tipos de local e locais compatíveis, consulte Locais do repositório.
Adicione uma descrição para o repositório. As descrições ajudam a identificar a finalidade do repositório e o tipo de artefatos que ele contém.
Não inclua dados sensíveis, já que as descrições de repositórios não são criptografadas.
Se quiser usar rótulos para organizar os repositórios, clique em Adicionar rótulo e insira o par de chave-valor. É possível adicionar, editar ou remover rótulos depois de criar o repositório.
Na seção Criptografia, escolha o mecanismo de criptografia do repositório.
- Google-managed encryption key: criptografa o conteúdo do repositório com um Google-owned and Google-managed encryption key.
- Chave gerenciada pelo cliente: criptografe o conteúdo do repositório com uma chave controlada por você por meio do Cloud Key Management Service. Para instruções de configuração de chaves, consulte Como configurar CMEK para repositórios.
Clique em Criar.
O Artifact Registry cria o repositório e o adiciona à lista de repositórios.
Depois de criar o repositório:
- Conceda acesso ao repositório.
Configure o Docker, gerenciadores de pacotes e outros clientes de terceiros para autenticar em repositórios.
Criar um repositório virtual usando CLI gcloud
Para criar um repositório virtual, defina os repositórios upstream em um arquivo de política e crie o repositório usando esse arquivo.
Crie um arquivo de política upstream no formato JSON com as seguintes configurações:
[{ "id" : "POLICY_ID", "repository" : "UPSTREAM_REPOSITORY_RESOURCE_NAME", "priority" : PRIORITY }, {...}]
POLICY_ID
é um nome para a política. Cada repositório upstream na política precisa ter um ID exclusivo.UPSTREAM_REPO_RESOURCE_NAME
é o nome do repositório upstream no formato:projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY
- Um repositório upstream pode ser padrão, remoto ou virtual.
- Um repositório upstream precisa estar no mesmo local que o repositório virtual, mas pode estar em um Google Cloud projeto diferente.
- Um repositório upstream precisa ter o mesmo formato de artefato que o repositório virtual.
PRIORITY
é um número inteiro que indica a prioridade do repositório upstream. Valores de prioridade mais alta têm precedência sobre valores mais baixos.
O exemplo a seguir mostra um arquivo de política chamado
policies.json
com quatro repositórios upstream.upstream1
tem o valor mais alto parapriority
, então o Artifact Registry vai pesquisar primeiro.upstream-test
tem o menor valor depriority
, então o Artifact Registry vai pesquisá-lo por último.upstream2
eupstream3
têm a mesma prioridade. Se o Artifact Registry encontrar um pacote solicitado em repositórios com a mesma prioridade, ele poderá disponibilizar o pacote de qualquer um dos repositórios.[{ "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 }]
Este exemplo também deixa espaço entre os valores de prioridade. Essas lacunas oferecem flexibilidade para adicionar repositórios upstream com prioridades que estão entre os valores atuais. Por exemplo, você pode adicionar um repositório
upstream-3
com uma prioridade de70
para que o Artifact Registry o pesquise antes deupstream-test
.Considere armazenar o arquivo de política upstream no sistema de controle de origem para reutilizá-lo depois e fazer mudanças nas configurações do repositório upstream e rastrear mudanças históricas.
No diretório com o arquivo de política upstream, execute o seguinte comando para criar o repositório 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
Substitua:
VIRTUAL-REPOSITORY-NAME
é o nome do repositório virtual.PROJECT_ID
é o ID do projeto em que você está criando o repositório virtual. Se essa sinalização for omitida, o projeto atual ou padrão será usado.FORMAT
é o formato do repositório. Os seguintes valores estão disponíveis:apt
(prévia particular)docker
go
maven
npm
python
yum
(prévia particular)
LOCATION
é o local regional ou multirregional do repositório. É possível omitir essa sinalização se você definir um padrão. Para ver uma lista de locais compatíveis, execute o comando:gcloud artifacts locations list
DESCRIPTION
é uma descrição opcional do repositório. Não inclua dados sensíveis, já que as descrições do repositório não são criptografadas.UPSTREAM_POLICY_FILE
é o caminho para o arquivo de política upstream.
Por exemplo, o comando a seguir cria um repositório virtual chamado
virtual-repo
para pacotes Python na regiãous-west1
com configurações empolicies.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
O Artifact Registry cria o repositório virtual.
Criar um repositório virtual usando o Terraform
Use o recurso google_artifact_registry_repository
para criar repositórios.
A versão 5.0.0
ou mais recente do terraform-provider-google
é obrigatória.
Se você não usa o Terraform para Google Cloud, consulte a página Primeiros passos: Google Cloud no site da HashiCorp.
O exemplo a seguir define o provedor, um repositório virtual com o
nome do recurso Terraform my-repo
e um repositório upstream com o nome do recurso
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
}
}
}
Onde
- PROJECT-ID é o ID do projeto Google Cloud .
- UPSTREAM_LOCATION é o local do repositório upstream. O repositório virtual e o upstream precisam estar na mesma região ou multirregião.
- UPSTREAM_REPOSITORY_ID é o ID do repositório upstream.
- UPSTREAM_REPOSITORY_DESCRIPTION é a descrição opcional do repositório upstream.
- LOCATION é o local do repositório virtual.
- REPOSITORY_ID é o ID do repositório virtual.
- DESCRIPTION é a descrição opcional do repositório virtual. Não inclua dados sensíveis, já que as descrições de repositórios não são criptografadas.
- KEY é o nome da chave do Cloud Key Management Service, se você estiver usando chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para criptografia. Omita esse argumento para usar a configuração padrão,as chaves de criptografia do Google Cloud.
- PRIORITY é o valor de prioridade opcional. A prioridade mais alta é 1. As entradas com um valor de prioridade maior têm precedência na ordem de extração.
Maven
Se você não especificar uma política de versão, o Artifact Registry vai criar um repositório Maven que armazena as versões de snapshot e de lançamento dos pacotes por padrão.
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
}
}
}
Onde
- PROJECT-ID é o ID do projeto Google Cloud .
- UPSTREAM_LOCATION é o local do repositório upstream. O repositório virtual e o upstream precisam estar na mesma região ou multirregião.
- UPSTREAM_REPOSITORY_ID é o ID do repositório upstream.
- UPSTREAM_REPOSITORY_DESCRIPTION é a descrição opcional do repositório upstream.
- LOCATION é o local do repositório virtual.
- REPOSITORY_ID é o ID do repositório virtual.
- DESCRIPTION é a descrição opcional do repositório virtual. Não inclua dados sensíveis, já que as descrições de repositórios não são criptografadas.
- KEY é o nome da chave do Cloud Key Management Service, se você estiver usando chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para criptografia. Omita esse argumento para usar a configuração padrão,as chaves de criptografia do Google Cloud.
- PRIORITY é o valor de prioridade opcional. A prioridade mais alta é 1. As entradas com um valor de prioridade maior têm precedência na ordem de extração.
Para armazenar versões de snapshot e de lançamento em repositórios diferentes, especifique uma política de versão para o repositório usando um bloco maven_config
. Esse bloco é compatível com as seguintes configurações:
version_policy
define a política de versão com um dos seguintes valores:VERSION_POLICY_UNSPECIFIED
: armazene o snapshot e os pacotes de lançamento. Essa é a configuração padrão.- RELEASE: armazena apenas pacotes de lançamento.
- SNAPSHOT: armazena apenas pacotes de snapshots.
allow_snapshot_overwrites
configura um repositório com uma política de versãoSNAPSHOT
para aceitar snapshots não exclusivos que substituem as versões existentes no repositório.
O exemplo a seguir define um repositório Maven com uma política de versão de lançamento.
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
}
}
}
Onde
- PROJECT-ID é o ID do projeto Google Cloud .
- UPSTREAM_LOCATION é o local do repositório upstream. O repositório virtual e o upstream precisam estar na mesma região ou multirregião.
- UPSTREAM_REPOSITORY_ID é o ID do repositório upstream.
- UPSTREAM_REPOSITORY_DESCRIPTION é a descrição opcional do repositório upstream.
- LOCATION é o local do repositório virtual.
- REPOSITORY_ID é o ID do repositório virtual.
- DESCRIPTION é a descrição opcional do repositório virtual. Não inclua dados sensíveis, já que as descrições de repositórios não são criptografadas.
- KEY é o nome da chave do Cloud Key Management Service, se você estiver usando chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para criptografia. Omita esse argumento para usar a configuração padrão,as chaves de criptografia do Google Cloud.
- PRIORITY é o valor de prioridade opcional. A prioridade mais alta é 1. As entradas com um valor de prioridade maior têm precedência na ordem de extração.
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
}
}
}
Onde
- PROJECT-ID é o ID do projeto Google Cloud .
- UPSTREAM_LOCATION é o local do repositório upstream. O repositório virtual e o upstream precisam estar na mesma região ou multirregião.
- UPSTREAM_REPOSITORY_ID é o ID do repositório upstream.
- UPSTREAM_REPOSITORY_DESCRIPTION é a descrição opcional do repositório upstream.
- LOCATION é o local do repositório virtual.
- REPOSITORY_ID é o ID do repositório virtual.
- DESCRIPTION é a descrição opcional do repositório virtual. Não inclua dados sensíveis, já que as descrições de repositórios não são criptografadas.
- KEY é o nome da chave do Cloud Key Management Service, se você estiver usando chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para criptografia. Omita esse argumento para usar a configuração padrão,as chaves de criptografia do Google Cloud.
- PRIORITY é o valor de prioridade opcional. A prioridade mais alta é 1. As entradas com um valor de prioridade maior têm precedência na ordem de extração.
O Artifact Registry cria o repositório. Execute o comando a seguir para ver uma descrição do repositório:
gcloud artifacts repositories describe REPOSITORY \
--location=LOCATION
Depois de criar o repositório:
- Conceda acesso ao repositório.
Configure o Docker, gerenciadores de pacotes e outros clientes de terceiros para autenticar em repositórios.
Atualizar repositórios upstream
É possível mudar a lista de repositórios upstream ou ajustar a prioridade deles.
Console
Abra a página Repositórios no console do Google Cloud .
Na lista de repositórios, selecione o repositório virtual e clique em Editar repositório.
Na lista Virtual Repository Upstream, faça as mudanças necessárias. É possível adicionar e remover repositórios ou mudar a prioridade deles na lista.
Clique em Salvar.
gcloud
Edite o arquivo de política upstream com suas mudanças. Por exemplo, talvez você queira adicionar um repositório upstream ou ajustar as configurações de prioridade.
Se você quiser remover todos os repositórios upstream, o arquivo de política precisará conter um conjunto vazio de repositórios.
[]
Execute o comando a seguir para aplicar as mudanças ao repositório virtual.
gcloud artifacts repositories update REPOSITORY \ --upstream-policy-file=UPSTREAM_POLICY_FILE
Substitua
UPSTREAM_POLICY_FILE
pelo caminho para o arquivo de política upstream.Para mais informações sobre o comando, consulte a documentação de referência gcloud artifacts repositories update.
Editar descrições de repositório
É possível mudar a descrição do repositório no console Google Cloud ou na CLI gcloud.
Console
Abra a página Repositórios no console do Google Cloud .
Na lista de repositórios, selecione o repositório e clique em Editar repositório.
Edite a descrição do repositório e clique em Salvar.
gcloud
Para atualizar a descrição do repositório, execute o comando:
gcloud artifacts repositories update REPOSITORY \
--project=PROJECT \
--location=LOCATION \
--description="DESCRIPTION"
Substitua:
REPOSITORY
: o nome do repositório. Se você tiver configurado um repositório padrão, poderá omitir essa flag para usar o padrão.PROJECT
: o ID do projeto do Google Cloud. Se essa flag for omitida, o projeto atual ou padrão será usado.-
LOCATION
é o local regional ou multirregional do repositório. Use esta flag para ver repositórios em um local específico. Se você tiver configurado um local padrão, poderá omitir essa flag para usar o padrão. DESCRIPTION
: uma descrição para o repositório.