Gerenciamento de dependências com o Artifact Registry

1. Visão geral

O Artifact Registry, antigo Container Registry, é uma central unificada para sua organização gerenciar imagens de contêiner e pacotes de linguagem (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. Desse modo, é 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
  • Configurar o Maven para usar o Artifact Registry para dependências 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. É 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.
  1. 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 desligar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou o projeto inteiro. 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á na organização GoogleCloudPlatform no GitHub. Clone com o comando abaixo e mude para o diretório.

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

3. Como trabalhar com imagens de contêiner

Criar um repositório do Docker no Artifact Registry

O Artifact Registry é compatível com o gerenciamento de imagens de contêiner e pacotes de linguagem. Diferentes tipos de artefatos exigem especificações diferentes. Por exemplo, as solicitações de dependências do Maven são diferentes das solicitações de dependências do Node.

Para ser compatível com as 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 comando a seguir para criar um repositório para imagens do 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 prompt de autorização do Cloud Shell aparecer

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

Configurar a autenticação do Docker no Artifact Registry

Ao se conectar ao Artifact Registry, as credenciais são necessárias para fornecer acesso. Em vez de configurar credenciais separadas, o Docker pode ser configurado para usar suas credenciais do gcloud de maneira integrada.

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

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

O comando vai pedir uma confirmação para mudar a configuração do Docker do Cloud Shell. Clique em "Enter".

Conheça o aplicativo de amostra

Um aplicativo de amostra é fornecido no repositório git que você clonou em uma etapa anterior. Mude para 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 que não são relevantes para este laboratório específico, ela contém o código-fonte, na pasta src, e um Dockerfile que vamos usar para criar uma imagem de contêiner localmente.

Crie a imagem de contêiner

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

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 para o repositório criado anteriormente:

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

Analisar a imagem no Artifact Registry

Acesse Console do Google 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 tag tag1. Veja que a verificação de vulnerabilidades está em execução ou já foi concluída e 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 CVE e a gravidade. Clique em "VER" em cada vulnerabilidade listada para conferir mais detalhes:

c2a961e6218d5a45.png

4. como trabalhar com pacotes de idioma

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

Criar um repositório de pacotes Java

No Cloud Shell, execute o seguinte comando para criar um repositório para 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 console do Google Cloud > Artifact Registry > Repositórios e observe o repositório Maven recém-criado chamado container-dev-java-repo. Se você clicar nele, verá que 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 suas credenciais de conta de usuário para que o auxiliar de credenciais do Artifact Registry possa fazer a autenticação usando essas credenciais ao se conectar com repositórios:

gcloud auth login --update-adc

Configurar o Maven para o Artifact Registry

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 .

Ative os cookies de terceiros clicando em "O site não está funcionando?" e depois em "Permitir cookies".

Depois que o navegador for recarregado, abra o Cloud Shell e execute o comando acima mais uma vez para carregar a pasta do aplicativo.

62328383ea59b30c.png

a9d756bf08575b0d.png

Abra o arquivo pom.xml no editor do Cloud Shell e clique em "Abrir editor".

95d98e831787b2ff.png

Abra o terminal no Editor do Cloud Shell e execute o comando a seguir para imprimir a configuração do repositório e adicioná-la ao seu projeto Java:

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

e adicione as configurações retornadas às seções apropriadas no arquivo pom.xml.

Visualização do Cloud Editor com terminal integrado:

33c3bfa412b7babd.png

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>

Atualize 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 referência. Substitua <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>

Fazer upload do pacote Java para o Artifact Registry

Com o Artifact Registry configurado no Maven, agora você pode usar o Artifact Registry para armazenar Jars Java para que outros projetos na sua organização os usem.

Execute o comando a seguir para fazer upload do pacote Java no Artifact Registry:

mvn deploy

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

e348d976ac1ac107.png

5. Parabéns!

Parabéns, você concluiu o codelab.

Conteúdo abordado

  • Criou repositórios para contêineres e pacotes de linguagem
  • Imagens de contêiner gerenciadas com o Artifact Registry
  • Configurou o Maven para usar o Artifact Registry para dependências Java

Limpeza

Execute o comando a seguir para excluir o projeto:

gcloud projects delete $PROJECT_ID