Criar repositórios virtuais

Nesta página, descrevemos como criar repositórios.

Os repositórios virtuais funcionam como um ponto de acesso único 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 padrão do Artifact Registry ou remoto repositório de dados.

Os outros modos de repositório são:

  • Padrão: é o modo de repositório padrão. Você envia ou publica artefatos como pacotes privados diretamente nos repositórios padrão. É possível fazer o download diretamente de repositórios padrão individuais, o acesso a grupos de repositórios com um repositório virtual simplifica configuração da ferramenta.
  • Remoto (somente repositórios de pacotes de linguagem): uma extração cache para artefatos em repositórios públicos, como Maven Central ou PyPI. Ele serve como um proxy para os repositórios públicos, proporcionando mais controle sobre as dependências externas.

Para mais informações sobre como os repositórios virtuais funcionam, consulte a Visão geral do repositório virtual.

Antes de começar

Ative o Artifact Registry, incluindo ativar a API Artifact Registry e instalando a versão mais recente da Google Cloud CLI.

Funções exigidas

Para receber as permissões necessárias para gerenciar repositórios, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

Se os repositórios upstream estiverem em outros projetos, um administrador em os projetos com repositórios upstream precisam ter permissões para gerenciar acesso a esses repositórios.

Criar repositórios upstream

Antes de configurar um repositório virtual, crie os repositórios upstream que que você quer disponibilizar com o repositório virtual.

  1. Crie os repositórios upstream no mesmo Google Cloud a região em que você planeja criar o repositório virtual.

  2. Os repositórios virtuais usam o Agente de serviço do Artifact Registry para autenticação em repositórios upstream. Você precisa conceder o serviço de leitura do agente para repositórios upstream.

    É possível conceder o papel Leitor do Artifact Registry ao Agente de serviço do Artifact Registry no projeto para não precisar conceder acesso a recursos upstream repositórios.

    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 projeto do Google Cloud. com o repositório upstream.
    • VIRTUAL_REPO_PROJECT_NUMBER é o número do projeto do Google Cloud de seu repositório virtual.

    Como alternativa, se você quiser conceder um papel com escopo mais restrito ao serviço agente, adicione a permissão artifactregistry.repositories.readViaVirtualRepository para um papel personalizado. e, em seguida, 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 definir as seguintes configurações que não pode ser alterado após a criação do repositório:

  • 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 propriedade e gerenciadas pelo Google; ou chaves de criptografia gerenciadas pelo cliente. O Artifact Registry usa Chaves de propriedade e gerenciadas pelo Google por padrão.

O Artifact Registry aplica restrições de políticas da organização que precisam da CMEK para criptografar recursos ou limitar podem ser usadas para proteção da CMEK.

Criar um repositório virtual usando o console do Google Cloud

  1. Abra a página Repositórios no console do Google Cloud.

    Abrir a página Repositórios

  2. Clique em Criar repositório.

  3. Especifique o nome do repositório. Para cada local de repositório em um projeto, os nomes dos repositórios precisam ser exclusivos.

  4. Selecione o formato do repositório.

  5. Em Repository mode, selecione Virtual.

  6. Em Upstreams do repositório virtual, clique em Adicionar upstream para adicionar um repositório upstream.

    • Um repositório upstream pode ser padrão, remoto ou virtual.
    • O repositório upstream precisa estar no mesmo local que o repositório de dados, mas pode estar em outro projeto do Google Cloud.
    • Um repositório upstream precisa ter o mesmo formato de artefato que o repositório repositório de dados.

    Especifique uma prioridade e um nome de política para cada upstream repositório de dados. Os valores de prioridade mais altos têm precedência sobre os valores mais baixos. Deixe espaço entre os valores de prioridade para que haja flexibilidade de adição repositórios upstream com prioridades que estão entre os valores existentes.

  7. Em Tipo de local, escolha o local do repositório:

    1. Escolha o tipo de local: Região ou multirregião. A lista de locais muda para refletir a seleção.

    2. Na lista Região ou Multirregião, selecione um local.

    Para informações sobre os tipos de locais e os locais compatíveis, consulte Locais do repositório

  8. 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 confidenciais, pois as descrições do repositório são e não criptografados.

  9. Se você quiser usar marcadores para organizar seus repositórios, clique em Adicionar rótulo e insira o par de chave-valor do rótulo. É possível adicionar, editar ou remover rótulos depois de criar repositório de dados.

  10. Na seção Criptografia, escolha o mecanismo de criptografia do repositório.

    • Chave gerenciada pelo Google: criptografe o conteúdo do repositório com uma Chave de propriedade e gerenciada pelo Google.
    • 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.
  11. Clique em Criar.

O Artifact Registry cria o repositório e o adiciona à lista de repositórios.

Depois de criar o repositório:

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, em seguida, crie o repositório usando o arquivo de política.

  1. 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 upstream repositório na política precisa ter um ID de política exclusivo.
    • UPSTREAM_REPO_RESOURCE_NAME é o nome do upstream repositório no formato:

      projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY
      
      • Um repositório upstream pode ser padrão, remoto ou virtual.
      • O repositório upstream precisa estar no mesmo local que o repositório de dados, mas pode estar em outro projeto do Google Cloud.
      • Um repositório upstream precisa ter o mesmo formato de artefato que o repositório repositório de dados.
    • PRIORITY é um número inteiro que indica priority para o repositório upstream. Prioridade mais alta têm precedência sobre valores menores.

    O exemplo a seguir mostra um arquivo de política chamado policies.json com quatro em repositórios upstream. upstream1 tem o valor mais alto para priority, então o Artifact Registry vai fazer a pesquisa primeiro. upstream-test tem o o menor valor de priority, então o Artifact Registry vai fazer a pesquisa por último. upstream2 e upstream3 têm a mesma prioridade. Se O Artifact Registry encontra um pacote solicitado em repositórios com o mesma prioridade, ele pode disponibilizar o pacote de qualquer repositório.

    [{
    "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
    }]
    

    Esse 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 em entre os valores existentes. Por exemplo, você pode adicionar um upstream-3 repositório com prioridade 70 para que o Artifact Registry pesquise antes de upstream-test.

    Considere armazenar o arquivo de política upstream no seu sistema de controle de origem para para que você possa reutilizá-lo depois para fazer alterações nas configurações do repositório upstream e monitorar o histórico de alterações.

  2. 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 servidor repositório de dados.
    • 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. O seguinte estão disponíveis:
      • apt (pré-lançamento particular)
      • docker
      • maven
      • npm
      • python
      • yum (pré-lançamento 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, pois as descrições do repositório não são criptografados.

    • UPSTREAM_POLICY_FILE é um caminho para a política upstream. .

    Por exemplo, o comando a seguir cria um repositório virtual chamado virtual-repo para pacotes Python na região us-west1 com configurações em 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
    

O Artifact Registry cria o repositório virtual.

Criar um repositório virtual usando o Terraform

Usar o recurso google_artifact_registry_repository para criar repositórios. Versão do terraform-provider-google 5.0.0 ou mais recente é obrigatório.

Se você nunca usou o Terraform para Google Cloud, consulte a página Vamos começar - Google Cloud na site da HashiCorp.

O exemplo a seguir define o provedor, um repositório virtual com o O nome do recurso do Terraform my-repo e um repositório upstream com o Terraform nome do recurso 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 do Google Cloud;
  • UPSTREAM_LOCATION é o local do repositório upstream. Observe que o o repositório virtual e o upstream precisam estar na mesma região ou multirregional.
  • 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 para o servidor repositório de dados. Não inclua dados sensíveis, porque as descrições do repositório não são criptografados.
  • 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. Omitir esse argumento para usar a configuração padrão, chaves de propriedade e gerenciadas pelo Google.
  • PRIORITY é o valor de prioridade opcional. A prioridade mais alta. é 1. Entradas com um valor de prioridade maior têm precedência no pull ordem.

Maven

Se você não especificar uma política de versão, o Artifact Registry cria um repositório Maven que armazena versões de snapshot e de lançamento de 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 do Google Cloud;
  • UPSTREAM_LOCATION é o local do repositório upstream. Observe que o o repositório virtual e o upstream precisam estar na mesma região ou multirregional.
  • 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 para o servidor repositório de dados. Não inclua dados sensíveis, porque as descrições do repositório não são criptografados.
  • 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. Omitir esse argumento para usar a configuração padrão, chaves de propriedade e gerenciadas pelo Google.
  • PRIORITY é o valor de prioridade opcional. A prioridade mais alta. é 1. Entradas com um valor de prioridade maior têm precedência no pull ordem.

Armazenar versões de snapshot e de lançamento em diferentes os repositórios, especifique uma política de versão para os repositório usando um bloco maven_config. Esse bloco oferece suporte à seguintes configurações:

  • version_policy define a política de versão com um dos seguintes valores:
    • VERSION_POLICY_UNSPECIFIED: armazena pacotes de snapshot e de lançamento. Isso é a configuração padrão.
    • LANÇAMENTO: armazene somente pacotes de lançamento.
    • SNAPSHOT: armazenar somente pacotes de snapshots.
  • O allow_snapshot_overwrites configura um repositório com um SNAPSHOT. política de versão para aceitar snapshots não exclusivos que substituem no repositório.
.

O exemplo a seguir define um repositório Maven com uma versão de lançamento política.

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 do Google Cloud;
  • UPSTREAM_LOCATION é o local do repositório upstream. Observe que o o repositório virtual e o upstream precisam estar na mesma região ou multirregional.
  • 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 para o servidor repositório de dados. Não inclua dados sensíveis, porque as descrições do repositório não são criptografados.
  • 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. Omitir esse argumento para usar a configuração padrão, chaves de propriedade e gerenciadas pelo Google.
  • PRIORITY é o valor de prioridade opcional. A prioridade mais alta. é 1. Entradas com um valor de prioridade maior têm precedência no pull ordem.

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 do Google Cloud;
  • UPSTREAM_LOCATION é o local do repositório upstream. Observe que o o repositório virtual e o upstream precisam estar na mesma região ou multirregional.
  • 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 para o servidor repositório de dados. Não inclua dados sensíveis, porque as descrições do repositório não são criptografados.
  • 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. Omitir esse argumento para usar a configuração padrão, chaves de propriedade e gerenciadas pelo Google.
  • PRIORITY é o valor de prioridade opcional. A prioridade mais alta. é 1. Entradas com um valor de prioridade maior têm precedência no pull ordem.

O Artifact Registry cria seu repositório. Execute o comando a seguir para visualizar uma descrição do repositório:

gcloud artifacts repositories describe REPOSITORY \
    --location=LOCATION

Depois de criar o repositório:

Atualizar repositórios upstream

É possível alterar a lista de repositórios upstream ou ajustar a prioridade de em repositórios upstream.

Console

  1. Abra a página Repositórios no console do Google Cloud.

    Abrir a página Repositórios

  2. Na lista de repositórios, selecione o repositório virtual e clique em Editar repositório.

  3. Na lista Upstream do repositório virtual, faça as alterações necessárias. É possível adicionar e remover repositórios ou alterar a prioridade de repositórios na lista

  4. Clique em Salvar.

gcloud

  1. Edite o arquivo de política upstream com as mudanças. Por exemplo, talvez você adicionar um repositório upstream ou ajustar as configurações de prioridade.

    Se você quiser remover todos os repositórios upstream, seu arquivo de política deverá contêm um conjunto vazio de repositórios.

    []
    
  2. Execute o comando a seguir para aplicar as alterações ao repositório virtual.

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

    Substitua UPSTREAM_POLICY_FILE pelo caminho para o upstream do arquivo de política.

    Para mais informações sobre o comando, consulte a Referência de gcloud artifacts repositories update na documentação do Google Cloud.

Editar descrições do repositório

É possível alterar a descrição do repositório no console do Google Cloud ou no CLI gcloud.

Console

  1. Abra a página Repositórios no console do Google Cloud.

    Abrir a página Repositórios

  2. Na lista de repositórios, selecione o repositório e clique em Editar repositório.

  3. 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, será possível omitir essa sinalização para usar o padrão.
  • PROJECT: o ID do projeto do Google Cloud. Se essa sinalização for omitida, o projeto atual ou padrão será usado.
  • LOCATION: um regional ou multirregional local. Use esta sinalização para ver repositórios em um local específico. Se você configurado um local padrão, omita essa sinalização para usar o padrão.
  • DESCRIPTION: uma descrição para o repositório.