Aller au contenu principal

Exercices et Projets


1 - Exercices pratiques

Exercice 1 : Configuration initiale

Objectif : Configurer un projet GCP pour le DevOps.

Tâches :

  1. Créer un projet GCP
  2. Activer les APIs nécessaires
  3. Créer un repository Artifact Registry
  4. Configurer gcloud CLI
Solution
# Créer le projet
gcloud projects create mon-projet-devops \
--name="Mon Projet DevOps"

# Définir comme projet actif
gcloud config set project mon-projet-devops

# Activer les APIs
gcloud services enable \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
container.googleapis.com \
monitoring.googleapis.com \
logging.googleapis.com

# Créer le repo Artifact Registry
gcloud artifacts repositories create images \
--repository-format=docker \
--location=europe-west1

# Configurer Docker
gcloud auth configure-docker europe-west1-docker.pkg.dev

Exercice 2 : Pipeline Cloud Build

Objectif : Créer un pipeline CI/CD pour une application Node.js.

Solution
# cloudbuild.yaml
steps:
- name: 'node:18'
entrypoint: 'npm'
args: ['ci']

- name: 'node:18'
entrypoint: 'npm'
args: ['run', 'lint']

- name: 'node:18'
entrypoint: 'npm'
args: ['test']

- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:latest'
- '.'

- name: 'gcr.io/cloud-builders/docker'
args:
- 'push'
- '--all-tags'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app'

images:
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:latest'

options:
machineType: 'E2_HIGHCPU_8'

Exercice 3 : Déploiement Cloud Run

Objectif : Déployer une application sur Cloud Run avec traffic splitting.

Solution
# Déployer la v1
gcloud run deploy my-app \
--image=europe-west1-docker.pkg.dev/mon-projet/images/app:v1 \
--region=europe-west1 \
--allow-unauthenticated \
--tag=v1

# Déployer la v2 sans traffic
gcloud run deploy my-app \
--image=europe-west1-docker.pkg.dev/mon-projet/images/app:v2 \
--region=europe-west1 \
--no-traffic \
--tag=v2

# Canary: 10% sur v2
gcloud run services update-traffic my-app \
--to-tags=v2=10,v1=90 \
--region=europe-west1

# Promouvoir v2 à 100%
gcloud run services update-traffic my-app \
--to-tags=v2=100 \
--region=europe-west1

Exercice 4 : Monitoring et alertes

Objectif : Configurer le monitoring et les alertes.

Solution
# Créer un uptime check
gcloud monitoring uptime-checks create http app-health \
--display-name="App Health Check" \
--resource-type=uptime-url \
--monitored-resource-labels=host=my-app-xxx.run.app \
--path=/health \
--check-interval=60s

# Créer un notification channel (email)
gcloud alpha monitoring channels create \
--display-name="Team Email" \
--type=email \
[email protected]

# Créer une alerte
gcloud alpha monitoring policies create \
--display-name="High Error Rate" \
--condition-display-name="Error rate > 1%" \
--condition-filter='resource.type="cloud_run_revision" AND metric.type="run.googleapis.com/request_count" AND metric.labels.response_code_class="5xx"' \
--condition-threshold-value=1 \
--condition-threshold-comparison=COMPARISON_GT \
--notification-channels=<channel-id>

2 - Projet complet : Application Microservices

Architecture

Structure du projet

my-microservices/
├── .cloudbuild/
│ ├── ci.yaml
│ └── cd.yaml
├── clouddeploy/
│ ├── delivery-pipeline.yaml
│ └── targets.yaml
├── services/
│ ├── frontend/
│ │ ├── Dockerfile
│ │ ├── package.json
│ │ └── kubernetes/
│ ├── api/
│ │ ├── Dockerfile
│ │ ├── package.json
│ │ └── kubernetes/
│ └── worker/
│ ├── Dockerfile
│ └── kubernetes/
├── skaffold.yaml
└── README.md

Pipeline CI

# .cloudbuild/ci.yaml
steps:
# Build all services
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/frontend:$COMMIT_SHA', './services/frontend']

- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/api:$COMMIT_SHA', './services/api']

- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/worker:$COMMIT_SHA', './services/worker']

# Push all
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/frontend:$COMMIT_SHA']

- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/api:$COMMIT_SHA']

- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/worker:$COMMIT_SHA']

# Create release
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'deploy'
- 'releases'
- 'create'
- 'release-$SHORT_SHA'
- '--delivery-pipeline=microservices-pipeline'
- '--region=${_REGION}'
- '--images=frontend=${_REGION}-docker.pkg.dev/$PROJECT_ID/images/frontend:$COMMIT_SHA,api=${_REGION}-docker.pkg.dev/$PROJECT_ID/images/api:$COMMIT_SHA,worker=${_REGION}-docker.pkg.dev/$PROJECT_ID/images/worker:$COMMIT_SHA'

substitutions:
_REGION: 'europe-west1'

options:
machineType: 'E2_HIGHCPU_8'

Cloud Deploy Pipeline

# clouddeploy/delivery-pipeline.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: microservices-pipeline
serialPipeline:
stages:
- targetId: dev
profiles: [dev]
- targetId: staging
profiles: [staging]
- targetId: production
profiles: [production]
strategy:
canary:
canaryDeployment:
percentages: [25, 50, 75]
verify: true

3 - Quiz de révision

  1. Quelle est la différence entre Cloud Build et Cloud Deploy ?

  2. Quand utiliser GKE Autopilot vs Standard ?

  3. Comment sécuriser les secrets dans Cloud Run ?

  4. Qu'est-ce que Workload Identity ?

  5. Comment configurer un canary deployment sur Cloud Run ?

Réponses
  1. Cloud Build exécute les builds (CI). Cloud Deploy gère la livraison (CD) vers les environnements.

  2. Autopilot : zéro gestion, pay-per-pod. Standard : contrôle total, GPU/TPU, customisation.

  3. Utiliser Secret Manager et monter les secrets avec --set-secrets.

  4. Méthode sécurisée pour permettre aux pods GKE d'accéder aux APIs GCP sans clés de service account.

  5. Déployer avec --no-traffic puis utiliser update-traffic pour augmenter progressivement le pourcentage.


4 - Certification Google Cloud

Professional Cloud DevOps Engineer

DomainePoids
Bootstrapping a Google Cloud organization17%
Building and implementing CI/CD pipelines24%
Applying SRE practices to a service23%
Implementing service monitoring strategies21%
Optimizing service performance15%

Ressources


Résumé du cours

Félicitations ! Vous avez complété le cours GCP DevOps.

Vous maîtrisez maintenant :

  • Cloud Source Repositories et les triggers
  • Cloud Build pour CI
  • Artifact Registry pour les artefacts
  • Cloud Deploy pour CD
  • GKE et Cloud Run pour l'exécution
  • Cloud Monitoring et Logging

Prochaines étapes

  • Pratiquer avec des projets réels
  • Passer la certification Professional Cloud DevOps Engineer
  • Explorer les services avancés (Cloud Functions, Anthos)

← Retour à la table des matières