Publier avec Cloud Deploy

1. Objectifs

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

Le flux de déploiement sera déclenché par un pipeline cloudbuild qui créera la version Cloud Deploy et effectuera le déploiement dans le cluster Preview. Une fois que vous avez vérifié que le déploiement en version Preview a bien fonctionné et qu'il fonctionne comme prévu, vous allez promouvoir manuellement la version dans le cluster Canary. La publication de la version dans le cluster de production nécessitera une approbation. Vous approuverez le pipeline de production dans l'interface utilisateur de Cloud Deploy, puis le publierez.

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

  • Préparer votre espace de travail
  • Définir des cibles Cloud Deploy
  • Définir le 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 ici configurer l'environnement nécessaire pour exécuter ce tutoriel. Une fois cette étape terminée, un cluster GKE sera créé dans lequel nous pourrons exécuter les déploiements.

  1. Définir les paramètres par défaut de la configuration gcloud

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Cloner le 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 cloudshell, créez un fichier nommé preview.yaml dans le répertoire de déploiement à l'aide de la commande suivante:

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 Cloud Shell, créez un fichier nommé canary.yaml dans le répertoire de déploiement à l'aide de la commande suivante:

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 Cloud Shell, créez un fichier nommé prod.yaml dans le répertoire de déploiement à l'aide de la commande suivante:

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 "requireApproval" est définie sur "true". La promotion ne sera pas diffusée dans la cible de production 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 application, le pipeline CICD est généralement configuré pour effectuer des builds, des tests d'intégration et des déploiements automatiques. Les étapes suivantes font partie du processus de configuration d'une nouvelle application. Un pipeline de déploiement sera configuré pour chaque nouvelle application.

Définir le pipeline Cloud Deploy

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

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.

La balise serialPipeline contient une balise nommée "stages", qui est une liste de toutes les cibles auxquelles ce pipeline de diffusion est configuré pour être déployé.

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

profiles est une liste d'un ou plusieurs noms de profils Skaffold, à partir de 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 sont développées, les chaînes d'outils CICD automatisées créent et stockent des composants. Les commandes suivantes sont exécutées pour créer l'application à l'aide de skaffold et stocker des éléments à déployer avec Cloud Deploy. Cette étape est effectuée par votre processus CICD 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 publication

À la fin du processus CICD, généralement lorsque le code est tagué pour la production, vous lancez le processus de publication en appelant la commande cloud deploy release. Une fois le déploiement validé et approuvé, vous allez déployer la version dans les différents environnements cibles en promouvant et en approuvant l'action via des processus automatisés ou des approbations manuelles.

Créer une version

Nous avons créé des fichiers Cloud Deploy dans ce tutoriel pour comprendre son fonctionnement. À des fins de démonstration, nous avons créé les mêmes fichiers Cloud Deploy et les avons importés dans un dépôt GitHub avec 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}"

Examiner la version

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

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

Cet écran affiche une représentation graphique de votre pipeline.

  1. Vérifiez qu'un contour vert s'affiche à gauche de la zone d'aperçu, ce qui signifie que la version a été déployée dans cet environnement.
  2. Vous pouvez consulter des informations supplémentaires sur la version en cliquant sur son nom sous "Détails de la version" dans la partie inférieure de l'écran.
  3. Pour vérifier que la version a bien déployé l'application, exécutez la commande suivante dans le shell :

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 d'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 vers 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 à gauche de la zone Canary, ce qui signifie que la version a été déployée dans cet environnement.
  3. Vérifiez que l'application est correctement déployée en créant un tunnel vers elle

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

Lorsque nous avons créé la cible de production via prod.yaml, nous avons spécifié la valeur "true" pour l'attribut requireApproval. Cela obligera à approuver la promotion en production.

  1. Promouvoir la version canari en 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 l'indicateur jaune indiquant "1 en attente".

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

  1. Cliquez sur le bouton "Examiner" situé juste en dessous de l'avis jaune.
  2. Sur l'écran suivant, cliquez à nouveau sur "Examiner" pour accéder à l'écran d'approbation pour la production.
  3. Vous pouvez également examiner la différence de fichier manifeste pour examiner les modifications. Dans ce cas, un tout nouveau fichier.
  4. Cliquez sur le bouton "Approuver".
  5. Revenez à la page du pipeline de l'application exemple, où vous verrez la publication en cours.

Examiner la version de production

Comme pour les autres environnements, vous pouvez examiner le déploiement une fois qu'il est terminé en suivant les étapes ci-dessous.

  1. Exécutez la commande suivante dans Cloud Shell pour créer le transfert de 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 d'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.