1. Présentation
Dans cet atelier, vous allez déployer une application .Net dans 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 à l'aide de Cloud Deploy et suivre les étapes permettant de promouvoir la publication dans ces environnements. Enfin, vous approuverez le déploiement de la version 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é. Avec Cloud Deploy, vous pouvez 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 Kubernetes natives. 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 l'application dans Cloud Run avec Cloud Deploy
- Promouvoir les versions de 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. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, 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 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 arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Configuration de l'environnement
Activez Cloud Shell en cliquant sur l'icône située à 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 conteneurs d'applications:
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
, qui contient 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 un 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 créer une version
Ajoutez les autorisations de l'opérateur Cloud Deploy 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 sur la cible suivante(qa-env).
Pour promouvoir la version via Cloud Shell, exécutez la commande gcloud.
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 contrôle qualité. Promouvoir la version sur la cible suivante(prod-env).
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 du déploiement").
Métrique | Description |
Nombre de déploiements | Nombre total de déploiements réussis et ayant échoué sur la cible finale de votre pipeline de livraison. |
Fréquence de déploiement | Fréquence à laquelle le pipeline de livraison se déploie jusqu'à la cible finale de votre pipeline de livraison.L'une des quatre métriques clés définies par le programme DORA (DevOps Research and Assessment). |
Taux d'échec du déploiement | Pourcentage de déploiements ayant échoué sur la cible finale de votre pipeline de livraison. |
Examinez 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 la 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.