Gérer les dépendances avec Artifact Registry

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

9cb46d3689b3ed2.png

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 :

c2a961e6218d5a45.png

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.

62328383ea59b30c.png

a9d756bf08575b0d.png

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

95d98e831787b2ff.png

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é :

33c3bfa412b7babd.png

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 :

e348d976ac1ac107.png

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