1. Descripción general
Artifact Registry te permite almacenar diferentes tipos de artefactos, crear varios repositorios en un solo proyecto y asociar una región específica o multirregión con cada repositorio. Existen varios modos de repositorio. Cada modo tiene un propósito diferente. En el siguiente diagrama, se muestra una de las muchas formas posibles en que puedes usar repositorios en diferentes modos en conjunto. En el diagrama, se muestra un flujo de trabajo en dos proyectos de Google Cloud. En un proyecto de desarrollo, los desarrolladores compilan una aplicación de Java. En un proyecto de entorno de ejecución independiente, otra compilación crea una imagen de contenedor con la aplicación para la implementación en Google Kubernetes Engine.
En este lab, aprenderás a realizar las siguientes tareas.
- Usa repositorios estándar para implementar tus paquetes privados
- Usa repositorios remotos para almacenar en caché paquetes de Maven Central
- Usa repositorios virtuales para combinar varios repositorios upstream en una configuración
Configuración del entorno de autoaprendizaje
- 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.
- 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 importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se mantendrá durante todo el proyecto. - Recuerda que 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.
- 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 generen cobros 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.
Configuración de Workspace
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)')
Habilita las APIs
gcloud services enable artifactregistry.googleapis.com
Clone el repositorio
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Repositorios estándar
Los repositorios estándar proporcionan una forma de almacenar tus paquetes privados y compartirlos con tus otras aplicaciones.
Crea un repositorio de Maven estándar
Desde Cloud Shell, ejecuta el siguiente comando para crear un repositorio para 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 - Repositories y observa el repositorio de Maven que acabas de crear llamado container-dev-java-repo
. Si haces clic en él, verás que está vacío en este momento.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Debería mostrar una respuesta similar a la siguiente:
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'
Configura Maven para Artifact Registry
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
El comando anterior muestra el XML que se agregará al pom.xml de tu proyecto.
- La sección repositories especifica dónde puede descargar Maven artefactos remotos para que los use el proyecto actual.
- La sección distributionManagement especifica a qué repositorio remoto enviará el proyecto cuando se implemente.
- La sección extensions agrega artifactregistry-maven-wagon, que habilita la capa de autenticación y transporte necesaria para conectarse a Artifact Registry.
- Nota: Las extensiones pueden existir en pom.xml o extensions.xml. En los casos en que el proyecto depende de un proyecto superior, se accede a esas dependencias antes de que se cargue el resto de las entradas en pom.xml. Para garantizar que el elemento superior tenga acceso a la extensión, se puede colocar en un archivo extensions.xml que se cargue antes que el pom.xml, lo que lo pone a disposición de las dependencias superiores.
Copia las tres secciones, abre el archivo pom.xml
en el editor de Cloud Shell y agrega la configuración que se muestra en la parte inferior del archivo, justo dentro de la etiqueta project
de cierre.
Sugerencia: En Cloud Shell, ejecuta el siguiente comando en la terminal para abrir el editor en el directorio actual.
cloudshell workspace .
Ejemplo: (los nombres de tus proyectos serán diferentes en las 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>
Sube tu paquete de Java a Artifact Registry
Con Artifact Registry configurado en Maven, ahora puedes usar Artifact Registry para almacenar archivos JAR de Java para que los usen otros proyectos de tu organización.
Ejecuta el siguiente comando para subir tu paquete de Java a Artifact Registry:
mvn deploy -DskipTests
Si quieres volver a ejecutar este comando, asegúrate de aumentar la versión en el archivo pom.xml.
Verifica el paquete de Java en Artifact Registry
Ve a consola de Cloud - Artifact Registry - Repositories Haz clic en container-dev-java-repo
y verifica que el artefacto binario hello-world
esté allí:
3. Repositorios remotos
Los repositorios remotos permiten almacenar en caché paquetes de terceros para aumentar la confiabilidad y la seguridad.
Crea un repositorio remoto
Nota: Para obtener detalles sobre la autenticación y la configuración, consulta la documentación del producto.
Desde Cloud Shell, ejecuta el siguiente comando para crear un repositorio remoto para los artefactos de 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
Revisa el repositorio en la consola
Ve a consola de Cloud - Artifact Registry - Repositories Haz clic en maven-central-cache
y observa que se creó y que está vacío.
Revisa el repositorio en la terminal
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Integra el repositorio en tu proyecto
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Agrega la sección del repositorio a tu pom.xml. Asegúrate de no copiar la etiqueta <repositories> externa del resultado.
Cambia el ID del repositorio agregado recientemente a "central" para asegurarte de que cada entrada del repositorio tenga un ID único.
Ejemplo: (los nombres de tus proyectos serán diferentes en las 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>
Ejecuta los siguientes comandos en la terminal para crear un extensions.xml
para tu proyecto. Para usar el mecanismo de extensiones principales, asegúrate de que Maven pueda resolver las dependencias superiores o de complementos de 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
Extrae dependencias del repositorio remoto
Ejecuta el siguiente comando para compilar tu aplicación con el repositorio remoto:
rm -rf ~/.m2/repository
mvn compile
Revisa los paquetes en la consola
Ve a consola de Cloud - Artifact Registry - Repositories Haz clic en maven-central-cache
y verifica que los artefactos binarios estén almacenados en caché allí:
4. Repositorios virtuales
Los repositorios virtuales actúan como una interfaz para acceder a varios repositorios a través de una sola configuración. Esto simplifica la configuración del cliente para los consumidores de tus artefactos y aumenta la seguridad, ya que mitiga los ataques de confusión de dependencias.
Crea un archivo 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
Crea el repositorio 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
Integra el repositorio en tu proyecto
Ejecuta el siguiente comando para imprimir la configuración del repositorio que deseas agregar a tu proyecto de Java:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Reemplaza toda la sección de repositorios de tu pom por la sección de repositorios virtuales del resultado.
Ejemplo: (los nombres de tus proyectos serán diferentes en las 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>
Extrae dependencias del repositorio virtual
Dado que el repositorio virtual es un pase y no almacenará ningún paquete real, para demostrar claramente el proceso, borrarás el repositorio maven-central-cache que creaste antes y lo volverás a crear para comenzar de nuevo con un repositorio vacío.
Ejecuta los siguientes comandos para volver a crear el repositorio de caché.
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
Puedes revisar el repositorio vacío en la consola. Ve a consola de Cloud - Artifact Registry - Repositories.
Ahora, compila tu proyecto con el siguiente comando para probar el repositorio virtual:
rm -rf ~/.m2/repository
mvn compile
Revisa los paquetes en la consola
Ve a consola de Cloud - Artifact Registry - Repositories Haz clic en maven-central-cache
y verifica que los artefactos binarios se hayan configurado para extraerse del repositorio virtual, pero que, en última instancia, se extrajeron de maven-central-cache
:
5. ¡Felicitaciones!
¡Felicitaciones! Completaste el codelab.
Temas abordados
- Usaste repositorios estándar para implementar tus paquetes privados
- Se usaron repositorios remotos para almacenar en caché paquetes de Maven Central.
- Se usaron repositorios virtuales para combinar varios repositorios upstream en una configuración.
Limpieza
Ejecuta el siguiente comando para borrar el proyecto:
gcloud projects delete ${PROJECT_ID}
—
Última actualización: 22/3/23