1. Présentation
Dans cet atelier, vous allez déployer une application .NET sur Cloud Run à l'aide de Cloud Deploy. Vous allez créer une image de conteneur avec Cloud Build sans utiliser de Dockerfile. Vous allez configurer un pipeline avec trois environnements cibles avec Cloud Deploy et suivre les étapes pour promouvoir la version dans les environnements. Enfin, vous approuverez la version à déployer dans l'environnement de production.

Qu'est-ce que Cloud Build ?
Avec Cloud Build, vous pouvez créer des logiciels rapidement dans tous les langages de programmation.
Qu'est-ce que Cloud Deploy ?
Cloud Deploy est un service de livraison continue entièrement géré. Cloud Deploy vous permet de créer des pipelines de déploiement pour GKE, Anthos et Cloud Run.
Qu'est-ce que Cloud Run ?
Avec Cloud Run, vous pouvez déployer des applications conteneurisées évolutives écrites dans n'importe quel langage (y compris Go, Python, Java, Node.js, .NET et Ruby) sur une plate-forme entièrement gérée.
Qu'est-ce que Skaffold ?
Skaffold est un outil de ligne de commande qui permet le développement continu pour les applications natives Kubernetes. Cloud Deploy utilise Skaffold pour les opérations de rendu et de déploiement.
Objectifs de l'atelier
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Créer un pipeline Cloud Deploy
- Créer une image de conteneur pour une application .NET avec Cloud Build sans utiliser de Dockerfile
- Déployer une application sur Cloud Run avec Cloud Deploy
- Promouvoir des versions Cloud Deploy
Prérequis
- Dans cet atelier, nous considérons que vous connaissez la console Cloud et les environnements de shell.
2. Préparation
Configuration du projet Cloud
- 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 non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Configuration de l'environnement
Activez Cloud Shell en cliquant sur l'icône à droite de la barre de recherche.

Dans Cloud Shell, exécutez la commande suivante pour définir les variables d'environnement du projet :
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
Activez les API :
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Créez un dépôt Artifact Registry pour stocker les images de conteneur d'application :
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Examiner les fichiers de configuration

Clonez le code source de l'application :
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Examinez la configuration du pipeline Cloud Deploy :
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
Examinez le fichier skaffold.yaml qui définit trois environnements et utilise Cloud Run comme service cible.
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
Examinez les fichiers de configuration du service.
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
Examinez le fichier cloudbuild.yaml contenant les étapes à suivre pour créer une image de conteneur et une version Cloud Deploy :
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. Créer un pipeline Cloud Deploy
Remplacez la valeur _PROJECT_ID dans le fichier clouddeploy.yaml :
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Créez le pipeline Cloud Deploy :
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Examinez le pipeline créé dans Cloud Deploy.
5. Créer une image de conteneur et une version
Ajoutez des autorisations Cloud Deploy Operator au compte de service Cloud Build :
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
Créez une image de conteneur et une version Cloud Deploy :
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
Examinez la version créée dans Cloud Deploy. Attendez la fin du déploiement dans l'environnement de développement.
6. Promouvoir la version dans les environnements de contrôle qualité et de production
À l'aide de la console Cloud ou de Cloud Shell, promouvez la version vers la prochaine cible(qa-env).
Promouvoir la version avec Cloud Shell : exécutez la commande gcloud pour promouvoir la version.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Attendez la fin du déploiement dans l'environnement de QA. Promouvoir la version vers la cible suivante(environnement de production).
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Ouvrez Cloud Deploy dans la console Cloud et approuvez la version pour le déploiement en production.

Examinez l'état du pipeline Cloud Deploy et les métriques DORA disponibles ("nombre de déploiements", "fréquence de déploiement", "taux d'échec des déploiements").
Métrique | Description |
Nombre de déploiements | Nombre total de déploiements ayant abouti ou échoué jusqu'à la cible finale dans le pipeline de livraison. |
Fréquence de déploiement | Fréquence à laquelle le pipeline de livraison se déploie jusqu'à la cible finale dans votre pipeline de livraison.Une des quatre métriques clés définies par le programme DORA (DevOps Research and Assessment). |
Taux d'échec du déploiement | Pourcentage d'échecs de déploiement jusqu'à la cible finale dans le pipeline de livraison. |
Examiner les applications déployées dans Cloud Run :

7. Félicitations !
Félicitations, vous avez terminé cet atelier de programmation.
Points abordés
- Créer un pipeline Cloud Deploy
- Créer une image de conteneur pour une application .NET avec Cloud Build
- Déployer une application sur Cloud Run avec Cloud Deploy
- Promouvoir une version Cloud Deploy
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.