1. Visão geral
O Artifact Registry permite armazenar diferentes tipos de artefatos, criar vários repositórios em um único projeto e associar uma região ou multirregião específica a cada repositório. Há vários modos de repositório. Cada modo tem uma finalidade diferente. O diagrama a seguir mostra uma das muitas maneiras possíveis de usar repositórios em diferentes modos. O diagrama mostra um fluxo de trabalho em dois projetos do Google Cloud. Em um projeto de desenvolvimento, os desenvolvedores criam um aplicativo Java. Em um projeto de execução separado, outro build cria uma imagem de contêiner com o aplicativo para implantação no Google Kubernetes Engine.
Neste laboratório, você vai aprender a realizar as seguintes tarefas.
- Usar repositórios padrão para implantar seus pacotes particulares
- Usar repositórios remotos para armazenar em cache os pacotes centrais do Maven
- Usar repositórios virtuais para combinar vários repositórios upstream em uma configuração
Configuração de ambiente personalizada
- Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.
- O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google É possível atualizar o local a qualquer momento.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como
PROJECT_ID
. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto. - Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto inteiro. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Configuração do espaço de trabalho
Configurar a gcloud
No Cloud Shell, defina o ID e o número do projeto. Salve-as como variáveis PROJECT_ID
e PROJECT_NUMBER
.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Ativar APIs
gcloud services enable artifactregistry.googleapis.com
Clone o repositório
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Repositórios padrão
Os repositórios padrão oferecem uma maneira de armazenar seus pacotes particulares e compartilhá-los com outros aplicativos.
Criar um repositório Maven padrão
No Cloud Shell, execute o seguinte comando para criar um repositório de artefatos Java:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Clique em "Autorizar" se o prompt de autorização do Cloud Shell aparecer.
Acesse o Google Cloud Console - Artifact Registry - Repositories e observe o repositório Maven recém-criado com o nome container-dev-java-repo
. Se você clicar nele, vai notar que ele está vazio no momento.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Deve retornar uma resposta semelhante a esta:
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2023-03-21T19:01:45.461589Z' description: Java package repository for Container Dev Workshop format: MAVEN mavenConfig: {} mode: STANDARD_REPOSITORY name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo updateTime: '2023-03-21T19:01:45.461589Z'
Configurar o Maven para o Artifact Registry
Execute o comando a seguir para imprimir a configuração do repositório a ser adicionada ao projeto Java:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
O comando anterior retorna o xml a ser adicionado ao pom.xml dos seus projetos.
- A seção repositories especifica onde o Maven pode fazer o download de artefatos remotos para uso pelo projeto atual.
- A seção distributionManagement especifica para qual repositório remoto o projeto será enviado quando for implantado.
- A seção extensions adiciona o artifactregistry-maven-wagon, que ativa a camada de autenticação e transporte necessária para se conectar ao Artifact Registry.
- Observação: as extensões podem existir em pom.xml ou extensions.xml. Nos casos em que o projeto depende de um projeto pai, essas dependências são acessadas antes que o restante das entradas no pom.xml seja carregado. Para garantir que o pai tenha acesso à extensão, ela pode ser colocada em um arquivo extensions.xml, que é carregado antes do pom.xml, disponibilizando-a para as dependências principais.
Copie as três seções, abra o pom.xml
no editor do Cloud Shell e adicione as configurações retornadas à parte de baixo do arquivo, logo abaixo da tag project
de fechamento.
Dica: no Cloud Shell, execute o comando a seguir no terminal para abrir o editor no diretório atual.
cloudshell workspace .
Exemplo: os nomes dos seus projetos serão diferentes nos URLs
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Fazer upload do pacote Java para o Artifact Registry
Com o Artifact Registry configurado no Maven, agora é possível usar o Artifact Registry para armazenar frascos Java para uso em outros projetos da sua organização.
Execute o comando a seguir para fazer upload do pacote Java para o Artifact Registry:
mvn deploy -DskipTests
Se você quiser executar esse comando novamente, aumente a versão no pom.xml.
Verificar o pacote Java no Artifact Registry
Acesse Console do Cloud - Artifact Registry - Repositórios. Clique em container-dev-java-repo
e verifique se o artefato binário hello-world
está presente:
3. Repositórios remotos
Os repositórios remotos permitem armazenar em cache pacotes de terceiros para aumentar a confiabilidade e a segurança.
Criar um repositório remoto
Observação: para saber mais sobre autenticação e configuração, consulte a documentação do produto.
No Cloud Shell, execute o comando a seguir para criar um repositório remoto para artefatos do Maven Central:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Analisar o repositório no console
Acesse Console do Cloud - Artifact Registry - Repositórios. Clique em maven-central-cache
e observe que ele foi criado e está vazio.
Analisar o repositório no terminal
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Integrar o repositório ao seu projeto
Execute o comando a seguir para imprimir a configuração do repositório a ser adicionada ao projeto Java:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Adicione a seção do repositório ao pom.xml. Não copie a tag <repositories> externa da saída.
Mude o ID do repositório recém-adicionado para "central" para garantir que cada entrada de repositório tenha um ID exclusivo.
Exemplo: os nomes dos seus projetos serão diferentes nos URLs
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Execute os comandos abaixo no terminal para criar um extensions.xml
para o projeto. Para usar o mecanismo de extensões principais, verifique se o Maven pode resolver dependências principais ou de plug-ins do Artifact Registry.
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
Extrair dependências do repositório remoto
Execute o comando abaixo para compilar seu aplicativo usando o repositório remoto:
rm -rf ~/.m2/repository
mvn compile
Analisar os pacotes no console
Acesse Console do Cloud - Artifact Registry - Repositórios. Clique em maven-central-cache
e verifique se os artefatos binários armazenados em cache estão lá:
4. Repositórios virtuais
Os repositórios virtuais funcionam como uma interface para que vários repositórios sejam acessados por uma única configuração. Isso simplifica a configuração do cliente para os consumidores dos seus artefatos e aumenta a segurança, mitigando ataques de confusão de dependência.
Criar um arquivo de política
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
Criar o repositório virtual
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
Integrar o repositório ao seu projeto
Execute o comando a seguir para imprimir a configuração do repositório a ser adicionada ao projeto Java:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Substitua toda a seção de repositórios no pom pela seção de repositórios virtuais da saída.
Exemplo: os nomes dos seus projetos serão diferentes nos URLs.
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Extrair dependências do repositório virtual
Como o repositório virtual é um intermediário e não armazena pacotes reais, para demonstrar claramente o processo, você vai excluir o repositório maven-central-cache criado anteriormente e recriar para começar de novo com um repositório vazio.
Execute os comandos abaixo para recriar o repositório de cache.
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Você pode analisar o repositório vazio no console. Acesse Console do Cloud - Artifact Registry - Repositórios.
Agora, use o repositório virtual criando seu projeto com o seguinte comando:
rm -rf ~/.m2/repository
mvn compile
Analisar os pacotes no console
Acesse Console do Google Cloud - Artifact Registry - Repositórios. Clique em maven-central-cache
e verifique se os artefatos binários foram configurados para extrair do repositório virtual, mas foram extraídos do maven-central-cache
:
5. Parabéns!
Parabéns, você concluiu o codelab.
Conteúdo abordado
- Usar repositórios padrão para implantar seus pacotes particulares
- Usamos repositórios remotos para armazenar em cache os pacotes centrais do Maven.
- Usamos repositórios virtuais para combinar vários repositórios upstream em uma configuração
Limpeza
Execute o comando a seguir para excluir o projeto
gcloud projects delete ${PROJECT_ID}
—
Última atualização: 22/03/23