Publier avec Cloud Deploy

1. Objectifs

Dans ce tutoriel, vous allez créer trois clusters GKE nommés "preview", "Canary" et "prod". Ensuite, créez une cible Cloud Deploy correspondant à chaque cluster et un pipeline Cloud Deploy qui définira la séquence des étapes pour effectuer le déploiement dans ces cibles.

Le flux de déploiement sera déclenché par un pipeline cloudbuild qui créera une version Cloud Deploy et effectuera le déploiement dans le cluster de prévisualisation. Après avoir vérifié que le déploiement en version preview a réussi et fonctionne comme prévu, vous pouvez promouvoir manuellement la version dans le cluster Canary. La promotion de la version dans le cluster de production nécessite une approbation. Vous devez approuver le pipeline de production dans l'interface utilisateur Cloud Deploy, puis le promouvoir.

Les objectifs de ce tutoriel peuvent être divisés en étapes suivantes:

  • Préparer votre espace de travail
  • Définir des cibles Cloud Deploy
  • Définir un pipeline Cloud Deploy
  • Créer une version
  • Promouvoir un déploiement
  • Approuver une version de production

Configuration de l'environnement au rythme de chacun

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

2. Configuration de la plate-forme

Préparer votre espace de travail

Nous allons configurer l'environnement nécessaire à l'exécution de ce tutoriel. Une fois cette étape terminée, un cluster GKE sera créé pour que nous puissions exécuter les déploiements.

  1. Définir les paramètres par défaut pour gcloud config

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Cloner un dépôt

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. Définir des variables d'environnement

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. Activer les API

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. Créer des clusters GKE
     `gcloud container clusters create preview \`
    

--zone=us-central1-a --async

    `gcloud container clusters create canary \`

--zone=us-central1-b --async

    `gcloud container clusters create prod \`

--zone=us-central1-c

Définir des cibles Cloud Deploy

  1. Dans le répertoire de déploiement, créez un fichier nommé preview.yaml à l'aide de la commande suivante dans cloudshell:

cat <<EOF >deploy/preview.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: preview

annotations: {}

labels: {}

description: Target for preview environment

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview

EOF

    As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
  1. Dans le répertoire de déploiement, créez un fichier nommé canary.yaml à l'aide de la commande suivante dans cloudshell:

cat <<EOF >deploy/canary.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: canary

annotations: {}

labels: {}

description: Target for canary environment

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary

EOF

  1. Dans le répertoire de déploiement, créez un fichier nommé prod.yaml à l'aide de la commande suivante dans cloudshell:

cat <<EOF >deploy/prod.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: Target

metadata:

name: prod

annotations: {}

labels: {}

description: Target for prod environment

requireApproval: true

gke:

cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod

EOF

Notez que la balise requirementsApproval est définie sur "true". La promotion dans la cible de production ne sera pas autorisée tant que l'approbation n'aura pas été accordée. Vous devez disposer du rôle roles/clouddeploy.approver pour approuver une version.

  1. Créer les cibles de déploiement
         `gcloud config set deploy/region us-central1` 
    

gcloud beta deploy apply --file deploy/preview.yaml

gcloud beta deploy apply --file deploy/canary.yaml

gcloud beta deploy apply --file deploy/prod.yaml

3. Création d'applications

Lors de la création d'une nouvelle application, le pipeline CI/CD est généralement configuré pour effectuer des compilations automatiques, des tests d'intégration et des déploiements. Les étapes suivantes sont considérées comme faisant partie du processus de configuration d'une nouvelle application. Un pipeline de déploiement est configuré pour chaque nouvelle application.

Définir un pipeline Cloud Deploy

  1. Dans le répertoire de déploiement, créez un fichier nommé pipeline.yaml à l'aide de la commande suivante dans cloudshell:

cat <<EOF >>deploy/pipeline.yaml

apiVersion: deploy.cloud.google.com/v1beta1

kind: DeliveryPipeline

metadata:

name: sample-app

labels:

`app: sample-app`

description: delivery pipeline

serialPipeline:

stages:

- targetId: preview

`profiles:`

`- preview`

- targetId: canary

`profiles:`

`- canary`

- targetId: prod

`profiles:`

`- prod`

EOF

    As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.

Le tag serialPipeline contient un tag nommé "étapes", qui est une liste de toutes les cibles sur lesquelles ce pipeline de livraison est configuré pour se déployer.

targetId identifie la cible spécifique à utiliser pour cette étape du pipeline de livraison. La valeur est la propriété metadata.name de la définition de la cible.

profiles est une liste de zéro, un ou plusieurs noms de profil Skaffold, provenant du fichier skaffold.yaml. Cloud Deploy utilise le profil avec le rendu Skaffold lors de la création de la version.

  1. Appliquer le pipeline

gcloud beta deploy apply --file deploy/pipeline.yaml

4. Phase de développement

À mesure que les applications seront développées, des chaînes d'outils CI/CD automatisées créeront et stockeront des éléments. Les commandes suivantes sont exécutées pour créer l'application à l'aide de Skaffold et stocker des éléments pour le déploiement avec Cloud Deploy. Cette étape est effectuée par votre processus CI/CD pour chaque build d'application.

  1. Créer et stocker l'application avec Skaffold

skaffold build \

--file-output=artifacts.json \

--default-repo gcr.io/$PROJECT_ID \

--push=true

5. Phase de lancement

À la fin de votre processus CI/CD, généralement lorsque le code est tagué pour la production, vous lancerez le processus de publication en appelant la commande cloud deploy release. Ensuite, une fois le déploiement validé et approuvé, vous la déplacerez dans les différents environnements cibles en promouvant et en approuvant l'action par le biais de processus automatisés ou d'approbations manuelles.

Créer une version

Nous avons précédemment créé des fichiers Cloud Deploy dans ce tutoriel pour vous aider à comprendre le fonctionnement de Cloud Deploy. À des fins de démonstration, nous avons créé les mêmes fichiers Cloud Deploy et les avons transférés vers un dépôt GitHub contenant un exemple d'application Go. Nous utiliserons Cloud Deploy pour publier cette application.

export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud beta deploy releases create \

sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--description="Release demo" \

--build-artifacts=artifacts.json \

--annotations="release-id=rel-${REL_TIMESTAMP}"

Vérifier la version

Lorsqu'une version Cloud Deploy est créée, elle est automatiquement déployée dans la première cible, à savoir l'aperçu.

  1. Accédez à <Cloud Deploy> dans la console Google Cloud
  2. Cliquez sur "sample-app".

Sur cet écran, vous verrez une représentation graphique de votre pipeline.

  1. Vérifiez qu'un contour vert s'affiche sur le côté gauche de la fenêtre d'aperçu, ce qui signifie que la version a été déployée dans cet environnement.
  2. Vous pouvez également consulter des informations supplémentaires sur la version en cliquant sur son nom sous "Détails de la version" dans la section inférieure de l'écran.
  3. Vérifiez que la version a bien déployé l'application, puis exécutez la commande suivante dans le cloushell

gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Cliquez sur l'icône Aperçu sur le Web en haut à droite de l'écran.
  2. Sélectionnez "Prévisualiser sur le port 8080".

Vous êtes redirigé vers une nouvelle page qui affiche le message "Hello World!"

  1. Utilisez ctrl+c dans le terminal pour mettre fin au transfert de port.

Promouvoir une version

Maintenant que votre version est déployée sur la première cible (preview) du pipeline, vous pouvez la promouvoir sur la cible suivante (Canary). Exécutez la commande suivante pour lancer le processus.

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

Examiner la promotion de la version

  1. Accédez au pipeline "sample-app" dans la console Google Cloud.
  2. Vérifiez qu'un contour vert s'affiche sur le côté gauche de la zone Canary, ce qui signifie que la version a été déployée dans cet environnement.
  3. Vérifier que l'application est correctement déployée en créant un tunnel vers celle-ci

gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Cliquez sur l'icône Aperçu sur le Web en haut à droite de l'écran.
  2. Sélectionnez "Prévisualiser sur le port 8080".

Vous êtes redirigé vers une nouvelle page qui affiche le message "Hello World!"

  1. Utilisez ctrl+c dans le terminal pour mettre fin au transfert de port.

Approuver une version de production

Rappelez-vous que lorsque nous avons créé la cible de production via prod.yaml, nous avons défini le tag requirementsApproval sur "true" (vrai). Cela vous obligera à exiger une approbation pour la promotion en production.

  1. Passez la version Canary à un environnement de production à l'aide de la commande suivante :

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. Accédez au pipeline "sample-app" dans la console Google Cloud.
  2. Notez que l'indicateur jaune indique "1 en attente".

Ce message indique qu'une version est en attente de déploiement en production, mais qu'elle doit être examinée et approuvée.

  1. Cliquez sur l'onglet "Examen" juste en dessous de la notification jaune.
  2. Sur l'écran suivant, cliquez sur "Vérifier". pour accéder à l'écran d'approbation
  3. Vous pouvez éventuellement examiner la différence du fichier manifeste pour examiner les modifications. Dans le cas présent, il s'agit d'un tout nouveau fichier.
  4. Cliquez sur le bouton "Approuver" bouton
  5. Revenez à la page du pipeline sample-app. Vous y verrez la version en production.

Vérifier la version de production

Comme pour les autres environnements, vous pouvez vérifier le déploiement lorsqu'il est terminé en suivant les étapes ci-dessous.

  1. Exécutez la commande suivante dans Cloud Shell pour créer le port

gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080

  1. Cliquez sur l'icône Aperçu sur le Web en haut à droite de l'écran.
  2. Sélectionnez "Prévisualiser sur le port 8080".

Vous êtes redirigé vers une nouvelle page qui affiche le message "Hello World!"

  1. Utilisez ctrl+c dans le terminal pour mettre fin au transfert de port.