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
- 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 $.
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.
- 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
- 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
- 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)")
- Activer les API
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- 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
- 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.
- 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
- 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.
- 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
- 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.
- 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.
- 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.
- Accédez à <Cloud Deploy> dans la console Google Cloud.
- Cliquez sur "sample-app".
Cet écran affiche une représentation graphique de votre pipeline.
- 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.
- 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.
- 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
- Cliquez sur l'icône d'aperçu sur le Web en haut à droite de l'écran.
- Sélectionnez "Prévisualiser sur le port 8080".
Vous êtes redirigé vers une nouvelle page qui affiche le message "Hello World!".
- 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
- Accédez au pipeline sample-app dans la console Google Cloud.
- 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.
- 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
- Cliquez sur l'icône d'aperçu sur le Web en haut à droite de l'écran.
- Sélectionnez "Prévisualiser sur le port 8080".
Vous êtes redirigé vers une nouvelle page qui affiche le message "Hello World!".
- 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.
- 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
- Accédez au pipeline sample-app dans la console Google Cloud.
- 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.
- Cliquez sur le bouton "Examiner" situé juste en dessous de l'avis jaune.
- Sur l'écran suivant, cliquez à nouveau sur "Examiner" pour accéder à l'écran d'approbation pour la production.
- Vous pouvez également examiner la différence de fichier manifeste pour examiner les modifications. Dans ce cas, un tout nouveau fichier.
- Cliquez sur le bouton "Approuver".
- 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.
- 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
- Cliquez sur l'icône d'aperçu sur le Web en haut à droite de l'écran.
- Sélectionnez "Prévisualiser sur le port 8080".
Vous êtes redirigé vers une nouvelle page qui affiche le message "Hello World!".
- Utilisez
ctrl+c
dans le terminal pour mettre fin au transfert de port.