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
- 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 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.
- 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.
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:
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
.
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" :
Dans la nouvelle fenêtre du navigateur, vous verrez la page de l'application Hello World.
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:
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:
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