Administración de dependencias con Artifact Registry

1. Descripción general

Como la evolución de Container Registry, Artifact Registry permite que tu organización administre imágenes de contenedor y paquetes de lenguajes (como Maven y npm) en un solo lugar. Está completamente integrado a las herramientas y entornos de ejecución de Google Cloud y, además, incluye compatibilidad con la administración de dependencias basada en lenguajes para usarla con herramientas como npm y Maven. Esto facilita la integración con tus herramientas de CI/CD para configurar canalizaciones automatizadas.

En este lab, conocerás algunas funciones disponibles en Artifact Registry.

Qué aprenderás

¿Cuáles son los objetivos de aprendizaje de este lab?

  • Crear repositorios para contenedores y paquetes de lenguajes
  • Administra imágenes de contenedor con Artifact Registry
  • Configura Maven a fin de usar Artifact Registry para las dependencias de Java

2. Configuración y requisitos

Cómo configurar el entorno a tu propio ritmo

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla en cualquier momento.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. por lo general, no te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (por lo general, se identifica como PROJECT_ID). Si no te gusta el ID generado, puedes generar otro aleatorio. También puedes probar el tuyo propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá mientras dure el proyecto.
  • Para tu información, hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Para cerrar recursos y evitar que se te facture más allá de este instructivo, puedes borrar los recursos que creaste o borrar todo el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Configura gcloud

Establece el ID y número del proyecto en Cloud Shell. Guárdalos como variables PROJECT_ID y PROJECT_NUMBER.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

Habilitar los servicios de Google

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

Obtén el código fuente

El código fuente de este lab se encuentra en la organización GoogleCloudPlatform, en GitHub. Clónalo con el comando que aparece a continuación y, luego, cambia al directorio.

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

3. Trabaja con imágenes de contenedor

Crear un repositorio de Docker en Artifact Registry

Artifact Registry admite la administración de imágenes de contenedor y paquetes de lenguajes. Los distintos tipos de artefactos requieren diferentes especificaciones. Por ejemplo, las solicitudes para dependencias de Maven son diferentes de las solicitudes para dependencias de nodo.

Para admitir las diferentes especificaciones de la API, Artifact Registry necesita saber qué formato quieres que tengan las respuestas de la API. Para ello, crearás un repositorio y pasarás la marca --repository-format que indica el tipo de repositorio deseado

En Cloud Shell, ejecuta el siguiente comando para crear un repositorio de imágenes de Docker:

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

Haz clic en Autorizar si aparece el mensaje de autorización de Cloud Shell.

Ve a la consola de Google Cloud - Artifact Registry - Repositorios y observa el repositorio de Docker que acabas de crear llamado container-dev-repo. Si haces clic en él, podrás ver que está vacío en este momento.

Configura la autenticación de Docker en Artifact Registry

Cuando te conectas a Artifact Registry, se requieren credenciales para proporcionar acceso. En lugar de configurar credenciales separadas, Docker puede configurarse para que use tus credenciales de gcloud sin problemas.

En Cloud Shell, ejecuta el siguiente comando para configurar Docker de modo que use Google Cloud CLI para autenticar las solicitudes a Artifact Registry en la región us-central1.

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

El comando solicitará una confirmación para cambiar la configuración de Docker de Cloud Shell. Presiona Intro.

Explora la aplicación de ejemplo

Se proporciona una aplicación de ejemplo en el repositorio de Git que clonaste en un paso anterior. Cambia al directorio de Java y revisa el código de la aplicación.

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

La carpeta contiene una aplicación de Java de ejemplo que procesa una página web simple. Además de varios archivos que no son relevantes para este lab específico, contiene el código fuente en la carpeta src y un Dockerfile que usaremos para compilar una imagen de contenedor de forma local.

Compila la imagen del contenedor

Para poder almacenar imágenes de contenedor en Artifact Registry, deberás crear una.

Ejecuta el siguiente comando para compilar la imagen del contenedor y etiquétala correctamente para enviarla a tu repositorio en el siguiente paso:

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

Envía la imagen de contenedor a Artifact Registry

Ejecuta el siguiente comando para enviar la imagen de contenedor al repositorio creado anteriormente:

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

Revisa la imagen en Artifact Registry

Ve a la consola de Google Cloud - Artifact Registry - Repositorios. Haz clic en container-dev-repo y verifica que la imagen java-hello-world esté allí. Haz clic en la imagen y observa la imagen etiquetada tag1. Puedes ver que el análisis de vulnerabilidades está en ejecución o ya se completó y que la cantidad de vulnerabilidades detectadas es visible.

9cb46d3689b3ed2.png

Haz clic en la cantidad de vulnerabilidades y verás la lista de vulnerabilidades detectadas en la imagen, con el nombre del boletín de CVE y la gravedad. Puedes hacer clic en VER en cada vulnerabilidad de la lista para obtener más detalles:

c2a961e6218d5a45.png

4. Cómo trabajar con paquetes de lenguaje

En esta sección, verás cómo configurar un repositorio Java de Artifact Registry y subir paquetes a él para aprovecharlos en diferentes aplicaciones.

Crea un repositorio de paquetes de Java

En Cloud Shell, ejecuta el siguiente comando para crear un repositorio de artefactos de Java:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

Haz clic en Autorizar si aparece el mensaje de autorización de Cloud Shell.

Ve a la consola de Google Cloud - Artifact Registry - Repositorios y observa el repositorio de Maven que acabas de crear llamado container-dev-java-repo. Si haces clic en él, podrás ver que está vacío en este momento.

Configurar la autenticación del repositorio de artefactos

Usa el siguiente comando para actualizar la ubicación conocida de las credenciales predeterminadas de la aplicación (ADC) con las credenciales de tu cuenta de usuario, de modo que el auxiliar de credenciales de Artifact Registry pueda autenticarse con ellas cuando se conecte con los repositorios:

gcloud auth login --update-adc

Configura Maven para Artifact Registry

Ejecuta el siguiente comando desde la carpeta java-hello-world para abrir el Editor de Cloud Shell y agregar la carpeta de la aplicación a su lugar de trabajo:

cloudshell workspace .

Haz clic en "¿El sitio ahora funciona?" para habilitar las cookies de terceros y luego "Permitir cookies".

Una vez que se vuelva a cargar el navegador, abre Cloud Shell y ejecuta el comando anterior una vez más para cargar la carpeta de la aplicación.

62328383ea59b30c.png

a9d756bf08575b0d.png

Abre el archivo pom.xml en el editor de Cloud Shell y haz clic en “Abrir editor”.

95d98e831787b2ff.png

Abre la terminal desde el Editor de Cloud Shell y ejecuta el siguiente comando para imprimir la configuración del repositorio que se agregará a tu proyecto de Java:

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

y agrega la configuración que se muestra a las secciones correspondientes del archivo pom.xml.

Vista de Cloud Editor con terminal integrada:

33c3bfa412b7babd.png

Actualiza la sección 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>

Actualiza la sección 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>

Actualiza las extensiones.

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

Este es un ejemplo del archivo completo para que lo consultes. Asegúrate de reemplazar <PROJECT> con tu ID del proyecto.

<?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>

Sube tu paquete de Java a Artifact Registry

Con Artifact Registry configurado en Maven, ahora puedes usar Artifact Registry para almacenar Java Jars y usarlo en otros proyectos de tu organización.

Ejecuta el siguiente comando para subir tu paquete de Java a Artifact Registry:

mvn deploy

Verifica el paquete de Java en Artifact Registry

Ve a Cloud Console: Artifact Registry - Repositorios Haz clic en container-dev-java-repo y verifica que el artefacto binario hello-world esté allí:

e348d976ac1ac107.png

5. ¡Felicitaciones!

¡Felicitaciones! Completaste el codelab.

Temas abordados

  • Repositorios creados para contenedores y paquetes de lenguajes
  • Imágenes de contenedor administradas con Artifact Registry
  • Se configuró Maven a fin de usar Artifact Registry para las dependencias de Java

Limpieza

Ejecuta el siguiente comando para borrar el proyecto

gcloud projects delete $PROJECT_ID