Présentation détaillée d'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. Il est entièrement intégré aux outils et aux environnements d'exécution de Google Cloud, et compatible avec la gestion des dépendances basée sur le langage, à utiliser 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.

Dans cet atelier, vous allez découvrir certaines fonctionnalités disponibles dans Artifact Registry.

Objectifs de l'atelier

Quels sont les objectifs de cet atelier ?

  • Créer des dépôts pour les conteneurs et les packages de langage
  • Gérer des images de conteneurs avec Artifact Registry
  • Intégrer Artifact Registry à Cloud Code
  • Configurer Maven afin d'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 qui n'est pas utilisée par les API Google, et que vous pouvez modifier à tout moment.
  • L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme PROJECT_ID), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé.
  • La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit 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/

Provisionner l'infrastructure utilisée dans cet atelier

Dans cet atelier, vous allez déployer du code sur GKE. Le script de configuration ci-dessous prépare cette infrastructure pour vous.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

3. Utiliser des images de conteneurs

Créer un dépôt Docker sur Artifact Registry

Artifact Registry permet de gérer les images de conteneurs et les packages de langages. Les différents types d'artefacts nécessitent des spécifications différentes. Par exemple, les requêtes pour les dépendances Maven sont différentes des requêtes pour les dépendances de nœuds.

Pour être compatible avec les différentes spécifications d'API, Artifact Registry doit savoir quel format vous souhaitez que les réponses de l'API suivent. Pour ce faire, vous allez créer un dépôt et transmettre l'option --repository-format indiquant le type de dépôt souhaité.

Dans Cloud Shell, exécutez la commande suivante afin de 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 Cloud Shell s'affiche.

Accédez à la console Google Cloud – Artifact Registry – Dépôts et notez le dépôt Docker que vous venez de créer, nommé container-dev-repo. Si vous cliquez dessus, vous pouvez constater qu'il est vide pour le moment.

Configurer l'authentification Docker sur Artifact Registry

Lorsque vous vous connectez à Artifact Registry, vous devez fournir des identifiants pour accorder l'accès. Plutôt que de définir des identifiants distincts, vous pouvez configurer Docker pour qu'il utilise vos identifiants gcloud de manière fluide.

Dans Cloud Shell, exécutez la commande suivante pour configurer Docker afin qu'il se serve de la 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 demande 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é précédemment. 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: en plus de différents fichiers qui ne sont pas pertinents pour cet atelier spécifique, il contient le code source, dans le dossier src, ainsi qu'un Dockerfile que nous utiliserons pour créer une image de conteneur en local.

Créer l'image du conteneur

Avant de pouvoir stocker des images de conteneurs dans Artifact Registry, vous devez en créer une.

Exécutez la commande suivante pour créer l'image de conteneur et lui ajouter les tags appropriés pour 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 du 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

Examiner 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 s'y trouve. Cliquez sur l'image et notez l'image avec le tag tag1. Vous pouvez voir 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 sa gravité. Vous pouvez cliquer sur "AFFICHER" pour chaque faille répertoriée pour obtenir plus de détails:

2b17e9d26d9dd7ea.png

4. Intégration à Cloud Code

Dans cette section, vous allez apprendre à utiliser le dépôt d'images Docker Artifact Registry avec Cloud Code.

Déployer l'application sur un cluster GKE à partir de Cloud Code

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 .

L'éditeur Cloud Shell s'ouvre avec l'explorateur dans le dossier de l'application.

Si un pop-up s'affiche pour vous demander d'exclure les fichiers de paramètres du projet Java de l'espace de travail, cliquez sur Exclude in workspace.

Dans les étapes suivantes, vous devrez indiquer l'emplacement de votre dépôt Artifact Registry. Le format de l'emplacement est le suivant:

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Pour trouver votre ID de projet, exécutez la commande suivante dans le terminal.

gcloud config get project

Cliquez sur la barre d'état Cloud Code (en bas à gauche), puis sélectionnez Run on Kubernetes.

e6e2b06467228e18.png

Lorsque vous y êtes invité, sélectionnez Yes pour utiliser le contexte actuel dans kubeconfig qui pointe vers le cluster GKE container-dev-cluster provisionné pour l'atelier

Dans l'invite du registre d'images, indiquez l'emplacement de l'adresse que vous avez localisé avant de remplacer <PROJECT_ID> par <PROJECT_ID>. pour votre valeur réelle

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Lorsque vous exécutez la commande "Exécuter sur Kubernetes" pour la première fois, Cloud Code vous invite à indiquer l'emplacement du dépôt d'images cible. Une fois fournie, l'URL du dépôt est stockée dans le fichier .vscode/launch.json, qui est créé dans le dossier de l'application.

Dans le volet de sortie, vous pouvez voir que la compilation de l'image de l'application java-hello-world, démarre. L'image est importée dans le dépôt Artifact Registry configuré précédemment

Accédez à Cloud Console – Artifact Registry – Dépôts. Cliquez sur container-dev-repo, puis vérifiez que l'image java-hello-world et notez une nouvelle image avec le tag latest.

Examiner l'application déployée

Revenez à l'éditeur Cloud Shell: une fois le déploiement terminé, Skaffold/Cloud Code affichera l'URL vers laquelle le service a été transféré. Cliquez sur le lien "Ouvrir l'aperçu sur le Web" :

33257a43826b88ff.png

Dans la nouvelle fenêtre du navigateur, vous verrez la page de l'application Hello World.

d3e49693b0383a5d.png

Mettre à jour le code de l'application

À présent, mettez à jour l'application pour que la modification soit immédiatement mise en œuvre dans le déploiement sur le cluster:

Dans l'éditeur Cloud Shell, ouvrez HelloWorldController.java dans le dossier src/main/java/cloudcode/helloworld/web.

Remplacez le texte "It's running!" (Exécution en cours) à la ligne 20. par "Mise à jour effectuée !"", vous devriez voir que le processus de compilation et de déploiement démarre immédiatement.

À la fin du déploiement, cliquez de nouveau sur l'URL transférée ou actualisez la fenêtre du navigateur avec l'application pour voir votre modification déployée:

41787b1da54ff137.png

Accédez de nouveau à Cloud Console – Artifact Registry – Dépôts. Cliquez sur container-dev-repo, puis vérifiez que l'image java-hello-world et notez la nouvelle image.

5. Utiliser des packages de langages

Dans cette section, vous allez apprendre à configurer un dépôt Java Artifact Registry et à y importer des packages, afin de les exploiter 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 Cloud Shell s'affiche.

Accédez à la console Google Cloud – Artifact Registry – Dépôts. Vous remarquerez que le dépôt Maven que vous venez de créer, nommé container-dev-java-repo, est vide.

Configurer l'authentification auprès d'Artifact Repository

Utilisez la commande suivante pour mettre à jour l'emplacement bien connu des identifiants par défaut de l'application (ADC) avec les identifiants de votre compte utilisateur afin que l'assistant d'identification Artifact Registry puisse s'authentifier à l'aide de ces identifiants lors de la connexion aux dépôts:

gcloud auth login --update-adc

Configurer Maven pour Artifact Registry

Exécutez la commande suivante pour afficher la configuration du dépôt à ajouter à votre projet Java:

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

Ouvrez le fichier pom.xml dans l'éditeur Cloud Shell et ajoutez les paramètres renvoyés dans les sections appropriées du fichier.

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 Dépôts.

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

Pour référence, voici un exemple du fichier complet. Assurez-vous de 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 utiliser Artifact Registry pour stocker des fichiers Jars Java qui seront 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 à Cloud Console – 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

6. Félicitations !

Félicitations, vous avez terminé cet atelier de programmation.

Points abordés

  • Création de dépôts pour les conteneurs et les packages de langage
  • Images de conteneurs gérées avec Artifact Registry
  • Artifact Registry intégré avec Cloud Code
  • Configuration de 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