1. Présentation
Fruit de l'évolution de Container Registry, Artifact Registry est un outil centralisé qui permet à votre organisation de gérer les images de conteneurs et les packages de langages tels que Maven et npm. Entièrement intégré aux outils et aux environnements d'exécution de Google Cloud, il est également compatible avec la gestion des dépendances basée sur le langage pour une utilisation avec des outils tels que npm et Maven. Il est donc facile de l'intégrer à vos outils de CI/CD pour créer des pipelines automatisés.
Cet atelier vous présente certaines des fonctionnalités disponibles dans Artifact Registry.
Objectifs de l'atelier
Quels sont les objectifs d'apprentissage de cet atelier ?
- Créer des dépôts pour les conteneurs et les packages de langages
- Gérer des images de conteneurs avec Artifact Registry
- Configurer Maven pour utiliser Artifact Registry pour les dépendances Java
2. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Configurer gcloud
Dans Cloud Shell, définissez l'ID et le numéro de votre projet. Enregistrez-les en tant que variables PROJECT_ID et PROJECT_NUMBER.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Activer les services Google
gcloud services enable \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
Obtenir le code source
Le code source de cet atelier se trouve dans l'organisation GoogleCloudPlatform sur GitHub. Clonez-le à l'aide de la commande ci-dessous, puis accédez au répertoire.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
3. Utiliser des images de conteneurs
Créez un dépôt Docker dans Artifact Registry :
Artifact Registry permet de gérer les images de conteneurs et les packages de langages. Chaque type d'artefact nécessite des spécifications différentes. Par exemple, les requêtes de dépendances Maven sont différentes des requêtes de dépendances Node.
Pour prendre en charge les différentes spécifications d'API, Artifact Registry doit connaître le format que vous souhaitez utiliser pour les réponses de l'API. Pour ce faire, vous allez créer un dépôt et transmettre le flag --repository-format indiquant le type de dépôt souhaité.
Dans Cloud Shell, exécutez la commande suivante pour créer un dépôt pour les images Docker :
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"
Cliquez sur "Autoriser" si l'invite d'autorisation de Cloud Shell s'affiche.
Accédez à la console Google Cloud : Artifact Registry > Dépôts. Vous devriez voir le dépôt Docker que vous venez de créer, nommé container-dev-repo. Si vous cliquez dessus, vous constaterez qu'il est vide pour le moment.
Configurer l'authentification Docker pour Artifact Registry
Lorsque vous vous connectez à Artifact Registry, des identifiants sont nécessaires pour vous donner accès. Plutôt que de configurer des identifiants distincts, vous pouvez configurer Docker pour qu'il utilise vos identifiants gcloud de manière transparente.
Dans Cloud Shell, exécutez la commande suivante pour configurer Docker afin qu'il utilise Google Cloud CLI pour authentifier les requêtes envoyées à Artifact Registry dans la région us-central1 :
gcloud auth configure-docker us-central1-docker.pkg.dev
La commande vous demandera de confirmer la modification de la configuration Docker de Cloud Shell. Appuyez sur Entrée.
Explorer l'exemple d'application
Un exemple d'application est fourni dans le dépôt Git que vous avez cloné lors d'une étape précédente. Accédez au répertoire java et examinez le code de l'application.
cd cloud-code-samples/java/java-hello-world
Le dossier contient un exemple d'application Java qui affiche une page Web simple. Outre divers fichiers qui ne sont pas pertinents pour cet atelier, il contient le code source, dans le dossier src, et un Dockerfile que nous utiliserons pour créer une image de conteneur en local.
Créer l'image de conteneur
Avant de pouvoir stocker des images de conteneur dans Artifact Registry, vous devez en créer une.
Exécutez la commande suivante pour créer l'image de conteneur et lui attribuer le tag approprié afin de la transférer vers votre dépôt à l'étape suivante :
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .
Transférer l'image de conteneur vers Artifact Registry
Exécutez la commande suivante pour transférer l'image de conteneur vers le dépôt créé précédemment :
docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1
Vérifier l'image dans Artifact Registry
Accédez à la console Google Cloud > Artifact Registry > Dépôts. cliquez sur container-dev-repo et vérifiez que l'image java-hello-world est bien présente. Cliquez sur l'image et notez qu'elle est taguée tag1. Vous pouvez constater que l'analyse des failles est en cours ou déjà terminée, et que le nombre de failles détectées est visible.

Cliquez sur le nombre de failles pour afficher la liste des failles détectées dans l'image, avec le nom du bulletin CVE et le niveau de gravité. Vous pouvez cliquer sur "AFFICHER" pour chaque faille listée afin d'obtenir plus de détails :

4. Travailler avec des packages de langages
Dans cette section, vous allez découvrir comment configurer un dépôt Java Artifact Registry et y importer des packages, puis les utiliser dans différentes applications.
Créer un dépôt de packages Java
Dans Cloud Shell, exécutez la commande suivante pour créer un dépôt pour les artefacts Java :
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Cliquez sur "Autoriser" si l'invite d'autorisation de Cloud Shell s'affiche.
Accédez à la console Google Cloud : Artifact Registry > Dépôts. Vous devriez voir le dépôt Maven que vous venez de créer, nommé container-dev-java-repo. Si vous cliquez dessus, vous constaterez qu'il est vide pour le moment.
Configurer l'authentification auprès du dépôt Artifact
Utilisez la commande suivante pour mettre à jour l'emplacement connu des identifiants par défaut de l'application (ADC) avec les identifiants de votre compte utilisateur. L'assistant d'identification Artifact Registry pourra ainsi s'en servir pour s'authentifier lors de la connexion aux dépôts :
gcloud auth login --update-adc
Configurer Maven pour Artifact Registry
Exécutez la commande suivante à partir du dossier java-hello-world pour ouvrir l'éditeur Cloud Shell et ajouter le dossier de l'application à son espace de travail :
cloudshell workspace .
Activez les cookies tiers en cliquant sur "Le site fonctionne-t-il maintenant ?", puis sur "Autoriser les cookies".
Une fois le navigateur rechargé, ouvrez Cloud Shell et exécutez à nouveau la commande ci-dessus pour charger le dossier de l'application.


Ouvrez le fichier pom.xml dans l'éditeur Cloud Shell en cliquant sur "Ouvrir l'éditeur".

Ouvrez le terminal de l'éditeur Cloud Shell et exécutez la commande suivante pour imprimer la configuration du dépôt à ajouter à votre projet Java :
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
et ajoutez les paramètres renvoyés aux sections appropriées du fichier pom.xml.
Vue de l'éditeur Cloud avec terminal intégré :

Mettre à jour la section 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>
Mettez à jour la section 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>
Mettre à jour les extensions
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
Voici un exemple de fichier complet pour référence. Veillez à remplacer <PROJECT> par l'ID de votre projet.
<?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>
Importer votre package Java dans Artifact Registry
Maintenant qu'Artifact Registry est configuré dans Maven, vous pouvez l'utiliser pour stocker des fichiers JAR Java qui pourront être utilisés par d'autres projets de votre organisation.
Exécutez la commande suivante pour importer votre package Java dans Artifact Registry :
mvn deploy
Vérifier le package Java dans Artifact Registry
Accédez à Console Cloud > Artifact Registry > Dépôts. Cliquez sur container-dev-java-repo et vérifiez que l'artefact binaire hello-world s'y trouve :

5. Félicitations !
Félicitations, vous avez terminé cet atelier de programmation.
Points abordés
- Dépôts créés pour les conteneurs et les packages de langages
- Gérer des images de conteneurs avec Artifact Registry
- Configurer Maven pour utiliser Artifact Registry pour les dépendances Java
Nettoyage
Exécutez la commande suivante pour supprimer le projet :
gcloud projects delete $PROJECT_ID