Este documento oferece uma vista geral dos repositórios virtuais. Para ver instruções sobre como criar um repositório virtual, consulte o artigo Crie repositórios virtuais.
As quotas e os limites do Artifact Registry aplicam-se aos repositórios virtuais.
Como funcionam os repositórios virtuais
Os repositórios virtuais atuam como um único ponto de acesso para transferir, instalar ou implementar artefactos no mesmo formato a partir de um ou mais repositórios a montante. Um repositório a montante 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 predefinido. Carregar ou publicar artefactos, como pacotes privados, diretamente em repositórios padrão. Embora possa fazer a transferência diretamente de repositórios padrão individuais, o acesso a grupos de repositórios com um repositório virtual simplifica a configuração das ferramentas.
- Remoto (apenas repositórios de pacotes de idiomas): uma cache de obtenção para artefactos em repositórios públicos, como o Maven Central ou o PyPI. Funciona como um proxy para os repositórios públicos, para que tenha mais controlo sobre as suas dependências externas.
Exemplos de utilização e vantagens
- Configuração do cliente mais simples
Para tarefas que só requerem acesso de leitura a repositórios, só tem de configurar um único repositório do Artifact Registry para aceder a artefactos armazenados em vários repositórios upstream.
Por exemplo:
- Um repositório virtual para pacotes Maven pode publicar pacotes Java privados a partir de um repositório padrão do Artifact Registry e pacotes Java públicos a partir de um repositório remoto que armazena em cache pacotes públicos do Maven Central.
- Um repositório virtual pode publicar pacotes Python privados a partir de vários repositórios padrão a montante pertencentes a equipas diferentes. Cada equipa tem acesso de escrita ao respetivo repositório a montante, mas transfere pacotes de outras equipas através do repositório virtual.
- Resolução de dependências mais segura
Pode atribuir uma prioridade aos repositórios upstream para ter mais controlo sobre o repositório que o Artifact Registry escolhe quando um artefacto pedido está em mais do que um repositório upstream.
Algumas ferramentas, como a ferramenta Python
pip
, não oferecem uma forma de controlar a ordem de pesquisa quando é configurada uma combinação de repositórios privados e públicos no cliente. Este tipo de configuração é vulnerável a um ataque de confusão de dependências, em que alguém carrega uma nova versão de um pacote com código incorreto para um repositório público para enganar os clientes e fazê-los escolher a versão incorreta.Pode usar repositórios remotos e virtuais em conjunto para mitigar este risco:
- Crie um repositório remoto como um proxy para o repositório público.
- Crie um repositório padrão para os seus pacotes privados.
- Crie um repositório virtual configurado para dar prioridade ao seu repositório padrão se existir uma versão do mesmo pacote em ambos os repositórios.
- Configure os gestores de pacotes e outras ferramentas para ler apenas a partir do repositório virtual, para que a lógica do cliente não esteja envolvida na seleção do repositório.
Para saber mais acerca de outras práticas recomendadas de gestão de dependências, consulte o artigo Gestão de dependências.
Como os repositórios virtuais selecionam um repositório upstream
Cada repositório a montante tem de ter uma prioridade configurada. A prioridade é um número inteiro que funciona como uma ponderação e não como uma classificação. Isto significa que os repositórios com um valor de prioridade mais elevado têm prioridade sobre os repositórios com valores de prioridade mais baixos.
Quando pede um artefacto que se encontra em vários repositórios upstream, o Artifact Registry usa a seguinte lógica de priorização:
- É dada prioridade ao repositório com o valor mais elevado. Por exemplo, um valor de
10
é tratado como de prioridade mais elevada do que um valor de1
. - Se vários repositórios a montante tiverem a mesma prioridade, o artefacto pode ser publicado a partir de qualquer um desses repositórios.
Quando configura diretamente um cliente para pesquisar um repositório virtual e repositórios adicionais, o cliente pode continuar a transferir artefactos de repositórios fora do Artifact Registry.
Por exemplo, se configurar a ferramenta Python pip
para pesquisar o PyPI e um repositório virtual, o seu pacote pode ser transferido diretamente do PyPI porque pip
escolhe sempre a versão mais recente de um pacote, independentemente do repositório de origem. Se o pip
estiver configurado para pesquisar apenas o repositório virtual, pode controlar a prioridade de todos os repositórios a montante, incluindo um repositório remoto a montante que atua como um proxy para o PyPI.
Formatos de repositório suportados
Pode criar repositórios virtuais para os seguintes formatos de repositório do Artifact Registry:
Pacotes de idiomas:
Pacotes do SO:
Se for a primeira vez que usa o Artifact Registry, pode usar os inícios rápidos para saber como configurar repositórios padrão para estes formatos.
Limitações
Além das quotas e limitações do Artifact Registry, os repositórios virtuais têm as seguintes limitações:
- Os repositórios upstream do Artifact Registry padrão têm de estar na mesma região ou multirregião que o repositório virtual, mas podem estar em Google Cloud projetos diferentes.
Os repositórios virtuais do Maven não permitem definir a política de versão como snapshot ou release.
Os upstream de APT e Yum têm de ser repositórios padrão do Artifact Registry.
Os repositórios padrão Apt e Yum atualizam o índice de pacotes de forma assíncrona depois de um pacote ser importado, carregado ou eliminado. Para repositórios pequenos, a regeneração do índice pode demorar vários segundos. Para repositórios maiores, a reindexação pode demorar vários minutos ou mais tempo. Após a reindexação estar concluída, a alteração ao repositório fica visível para os clientes do Apt e Yum.
O que se segue?
- Crie repositórios virtuais.
- Saiba mais sobre os repositórios do Artifact Registry lendo a vista geral do repositório.