Déployer une application Cloud Run avec Cloud Deploy

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.

916a54f51af5ee54.png

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

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

eb0157a992f16fa3.png

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

29c2533441779de0.png

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.

4c838b60770e9691.png

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:

d6372b5350f10875.png

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.

8. Étape suivante