Detalhes sobre o Artifact Registry

1. Visão geral

Como uma evolução do Container Registry, o Artifact Registry é uma central unificada para sua organização gerenciar imagens de contêiner e pacotes de linguagens (como Maven e NPM). Ele é totalmente integrado às ferramentas e aos ambientes de execução do Google Cloud e oferece suporte ao gerenciamento de dependências com base em linguagem para uso com ferramentas como npm e Maven. Dessa forma, é fácil integrar o Artifact Registry às ferramentas de CI/CD para configurar pipelines automatizados.

Neste laboratório, você vai conhecer alguns recursos disponíveis no Artifact Registry.

O que você vai aprender

Quais são os objetivos de aprendizado deste laboratório?

  • Criar repositórios para contêineres e pacotes de linguagem
  • Gerenciar imagens de contêiner com o Artifact Registry
  • Integrar o Artifact Registry ao Cloud Code
  • Configure o Maven para usar o Artifact Registry para dependências do Java

2. Configuração e requisitos

Configuração de ambiente personalizada

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  • Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, você precisará ativar 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 não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

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 os Serviços do Google

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

Conseguir o código-fonte

O código-fonte deste laboratório está localizado na organização GoogleCloudPlatform no GitHub. Clone-o com o comando abaixo e mude para o diretório.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

Provisionar a infraestrutura usada neste laboratório

Neste laboratório, você vai implantar códigos no GKE. O script de configuração abaixo prepara essa infraestrutura para você.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

3. Como trabalhar com imagens de contêiner

Criar um repositório do Docker no Artifact Registry

O Artifact Registry oferece suporte ao gerenciamento de imagens de contêiner e pacotes de linguagens. Diferentes tipos de artefato exigem especificações distintas. Por exemplo, as solicitações de dependências do Maven são diferentes das solicitações de dependências do nó.

Para oferecer suporte a diferentes especificações de API, o Artifact Registry precisa saber qual formato você quer que as respostas da API sigam. Para fazer isso, crie um repositório e transmita a flag --repository-format indicando o tipo de repositório desejado

No Cloud Shell, execute o seguinte comando para criar um repositório de imagens Docker:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"

Clique em "Autorizar" se o comando de autorização do Cloud Shell aparecer.

Acesse o Artifact Registry - Repositórios no console do Google Cloud e observe o repositório do Docker recém-criado, chamado container-dev-repo. Ao clicar nele, você verá que ele está vazio.

Configure a autenticação do Docker para o Artifact Registry

Ao se conectar ao Artifact Registry, as credenciais são necessárias para conceder acesso. Em vez de definir credenciais separadas, o Docker pode ser configurado para usar suas credenciais do gcloud sem problemas.

No Cloud Shell, execute o seguinte comando para configurar o Docker e usar a CLI do Google Cloud para autenticar solicitações ao Artifact Registry na região us-central1.

gcloud auth configure-docker us-central1-docker.pkg.dev

O comando vai solicitar uma confirmação para alterar a configuração do Docker do Cloud Shell. Pressione Enter.

Conheça o aplicativo de exemplo

Um aplicativo de exemplo é fornecido no repositório git que você clonou em uma etapa anterior. Acesse o diretório Java e revise o código do aplicativo.

cd cloud-code-samples/java/java-hello-world

A pasta contém um exemplo de aplicativo Java que renderiza uma página da Web simples: além de vários arquivos irrelevantes para este laboratório específico, ela contém o código-fonte, na pasta src, e um Dockerfile que usaremos para criar localmente uma imagem de contêiner.

Criar a imagem do contêiner

Antes de armazenar imagens de contêiner no Artifact Registry, você precisa criar uma.

Execute o comando a seguir para criar a imagem do contêiner e marcá-la corretamente para enviá-la ao repositório na próxima etapa:

docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .

Envie a imagem do contêiner para o Artifact Registry

Execute o comando a seguir para enviar a imagem do contêiner ao repositório criado anteriormente:

docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1

Revise a imagem no Artifact Registry

Acesse Console do Cloud – Artifact Registry – Repositórios. Clique em container-dev-repo e verifique se a imagem java-hello-world está lá. Clique na imagem e observe a imagem marcada com tag1. Você vai notar que a verificação de vulnerabilidades está em execução ou já foi concluída e que o número de vulnerabilidades detectadas está visível.

9cb46d3689b3ed2.png

Clique no número de vulnerabilidades para ver a lista de vulnerabilidades detectadas na imagem, com o nome do boletim de CVE e a gravidade. Você pode clicar em VISUALIZAR em cada vulnerabilidade listada para obter mais detalhes:

2b17e9d26d9dd7ea.png

4. Integração com o Cloud Code

Nesta seção, você vai aprender a usar o repositório de imagens Docker do Artifact Registry com o Cloud Code.

Implante o aplicativo no cluster do GKE pelo Cloud Code

Execute o comando a seguir na pasta java-hello-world para abrir o Editor do Cloud Shell e adicionar a pasta do aplicativo ao espaço de trabalho:

cloudshell workspace .

O editor do Cloud Shell será aberto com o explorador na pasta do aplicativo.

Se você receber um pop-up solicitando a exclusão de arquivos de configurações do projeto Java do espaço de trabalho, clique em Exclude in workspace.

As etapas a seguir exigem que você insira o local do repositório do Artifact Registry. O formato do local é:

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Para encontrar seu PROJECT_ID, execute o seguinte comando no terminal

gcloud config get project

Clique na barra de status do Cloud Code (no canto inferior esquerdo) e selecione Run on Kubernetes.

e6e2b06467228e18.png

Quando solicitado, escolha Yes para usar o contexto atual no kubeconfig que aponta para o cluster do GKE container-dev-cluster provisionado para o laboratório

No prompt do registro de imagem, insira o endereço localizado antes de substituir <PROJECT_ID>. para o valor real

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Ao executar a opção "Executar no Kubernetes" pela primeira vez, o Cloud Code solicita o local do repositório de imagens de destino. Depois de fornecido, o URL do repositório é armazenado no arquivo .vscode/launch.json, que é criado na pasta do aplicativo.

No painel de saída, você verá que o build da imagem do aplicativo java-hello-world, foi iniciado. Ela foi enviada para o repositório do Artifact Registry configurado anteriormente.

Acesse Console do Cloud - Artifact Registry - Repositórios. Clique em container-dev-repo e verifique se a imagem java-hello-world está marcada como latest

Revisar o aplicativo implantado

Volte ao editor do Cloud Shell: quando a implantação for concluída, o Skaffold/Cloud Code vai imprimir o URL exposto para o qual o serviço foi encaminhado, clique no link - Abrir visualização na Web:

33257a43826b88ff.png

Na nova janela do navegador, você verá a página do app Hello World.

d3e49693b0383a5d.png

Atualizar o código do aplicativo

Agora atualize o aplicativo para ver a mudança implementada imediatamente na implantação no cluster:

Abra o HelloWorldController.java na pasta src/main/java/cloudcode/helloworld/web no editor do Cloud Shell.

Altere o texto na linha 20 de "Em execução!". até ""It's updated!"", você verá o processo de criação e implantação começar imediatamente.

Ao final da implantação, clique novamente no URL encaminhado ou atualize a janela do navegador com o aplicativo para ver a alteração implantada:

41787b1da54ff137.png

Acesse novamente Console do Cloud - Artifact Registry - Repositórios. Clique em container-dev-repo, verifique se a imagem java-hello-world e anote a nova imagem

5. Como trabalhar com pacotes de linguagens

Nesta seção, você vai aprender a configurar um repositório Java do Artifact Registry e fazer upload de pacotes para ele, usando esses repositórios em diferentes aplicativos.

Criar um repositório de pacotes Java

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 comando de autorização do Cloud Shell aparecer.

Acesse o Artifact Registry - Repositórios no console do Google Cloud e observe o repositório Maven recém-criado, chamado container-dev-java-repo. Ao clicar nele, você vai notar que ele está vazio no momento.

Configurar a autenticação no Artifact Repository

Use o comando a seguir para atualizar o local conhecido do Application Default Credentials (ADC) com as credenciais da sua conta de usuário. Assim, o auxiliar de credenciais do Artifact Registry pode se autenticar usando essas credenciais ao se conectar a repositórios:

gcloud auth login --update-adc

Configurar o Maven para o Artifact Registry

Execute o seguinte comando para imprimir a configuração do repositório a ser adicionada ao seu projeto Java:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

Abra o arquivo pom.xml no editor do Cloud Shell e adicione as configurações retornadas às seções apropriadas no arquivo.

Atualize a seção distributionManagement

<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
</distributionManagement>

Atualizar a seção repositories

 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>

Atualize as extensões

<extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>

Aqui está um exemplo do arquivo completo para sua referência. Certifique-se de substituir <PROJECT> pelo ID do projeto.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <artifactId>hello-world</artifactId>
 <packaging>jar</packaging>
 <name>Cloud Code Hello World</name>
 <description>Getting started with Cloud Code</description>
 <version>1.0.0</version>
<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
   </repository>
 </distributionManagement>
 
 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>
 
 <parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.6.3</version>
 </parent>
 
 <properties>
   <java.version>1.8</java.version>
   <checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
 </properties>
 
 <build>
   <plugins>
     <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>jib-maven-plugin</artifactId>
       <version>3.2.0</version>
     </plugin>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
     </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-checkstyle-plugin</artifactId>
       <version>3.1.2</version>
     </plugin>
   </plugins>
   <extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>
 </build>
 
 <!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-gcp-dependencies</artifactId>
       <version>1.2.8.RELEASE</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
   </dependencies>
 </dependencyManagement>
  
 <dependencies>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jetty</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>
 
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-gcp-starter-logging</artifactId>
   </dependency>
      
 </dependencies>
 
</project>

Faça upload do pacote Java para o Artifact Registry

Agora que o Artifact Registry está configurado no Maven, é possível usar o Artifact Registry para armazenar Jars Java para outros projetos da organização.

Execute este comando para fazer upload do pacote Java no Artifact Registry:

mvn deploy

Verifique 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á lá:

e348d976ac1ac107.png

6. Parabéns!

Parabéns, você concluiu o codelab.

Conteúdo abordado

  • Repositórios criados para contêineres e pacotes de linguagens
  • Imagens de contêiner gerenciadas com o Artifact Registry
  • Artifact Registry integrado ao Cloud Code
  • Configurou o Maven para usar o Artifact Registry para dependências do Java

Limpeza

Execute o comando a seguir para excluir o projeto.

gcloud projects delete $PROJECT_ID