DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesGitLab CI avancé : review apps, cache et multi-projets05 - Planifier et déclencher des pipelines automatiquement

Détails

  • 20 minutes
  • Avancé

Objectifs

  • Créer un pipeline schedulé avec une expression cron dans GitLab
  • Utiliser $CI_PIPELINE_SOURCE == schedule dans les rules
  • Déclencher un pipeline via l'API GitLab pipeline_schedule
  • Utiliser $CI_PIPELINE_CREATED_AT pour horodater les builds schedulés
Module GitLab CI avancé : review apps, cache et multi-projets

Exercice 05 : Planifier et déclencher des pipelines automatiquement

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Créer un pipeline planifié (Schedule) avec une expression cron dans CI/CD → Schedules
  • ✅ Détecter un pipeline schedulé avec $CI_PIPELINE_SOURCE == "schedule" dans rules:
  • ✅ Déclencher un pipeline programmatiquement via l'API REST GitLab
  • ✅ Utiliser $CI_PIPELINE_CREATED_AT pour tracer les exécutions planifiées

Durée estimée : 20 minutes

Difficulté : ⭐⭐⭐⭐☆ (Avancé)

Prérequis :

  • Module GitLab CI Avancé - Exercices 01 à 04 complétés
  • Notions de base sur les cron expressions

📖 Contexte

Les pipelines GitLab peuvent être déclenchés de quatre façons : par un git push, manuellement depuis l'interface, par un webhook/API, ou automatiquement selon un planning cron (Schedules). Les pipelines schedulés sont idéaux pour les tâches de maintenance : nettoyage de la base, génération de rapports, tests de régression nocturnes.


📋 Énoncé

Configurez un pipeline schedulé qui exécute des tâches de maintenance à 2h du matin tous les jours. Ces tâches ne doivent s'exécuter QUE sur les pipelines schedulés, pas sur les git push. Ajoutez aussi un déclencheur API pour les déploiements d'urgence.


🧭 Déroulement de l'exercice

Tâche 1 : Créer un Schedule dans GitLab

Dans votre projet GitLab, naviguez vers CI/CD → Schedules → New schedule. Créez un schedule avec l'expression cron 0 2 * * * (tous les jours à 2h00 UTC) sur la branche main.

Indice : Format d'une expression cron : minute heure jour-du-mois mois jour-de-semaine

- 0 2 * * * = à la minute 0 de l'heure 2, tous les jours

- 0 9 * * 1-5 = à 9h00 du lundi au vendredi

- 0 */6 * * * = toutes les 6 heures

GitLab exécute les schedules en UTC. Pensez à convertir selon votre fuseau horaire.

Vérification : Le schedule apparaît dans CI/CD → Schedules avec la prochaine date d'exécution prévue.


Tâche 2 : Détecter le pipeline schedulé avec rules

Créez un job maintenance-nightly qui ne s'exécute QUE sur les pipelines schedulés. Utilisez $CI_PIPELINE_SOURCE == "schedule" dans les rules:.

Indice :

`yaml

maintenance-nightly:

rules:

- if: '$CI_PIPELINE_SOURCE == "schedule"'

when: on_success

- when: never

script:

- echo "Tâche de maintenance nocturne"

- echo "Lancée le : $CI_PIPELINE_CREATED_AT"

`

$CI_PIPELINE_SOURCE vaut schedule pour les pipelines planifiés, push pour les pushs Git, web pour les déclenchements manuels.

Vérification : Sur un git push, maintenance-nightly est absent du pipeline. En cliquant "Run" sur le schedule, il s'exécute.


Tâche 3 : Créer des jobs conditionnels push vs schedule

Créez un pipeline avec deux types de jobs : les jobs "build" qui s'exécutent sur push, et les jobs "maintenance" qui s'exécutent sur schedule. Les deux types ne doivent jamais s'exécuter ensemble.

Indice :

`yaml

# Job normal (push seulement)

build:

rules:

- if: '$CI_PIPELINE_SOURCE != "schedule"'

when: on_success

- when: never

>

# Job maintenance (schedule seulement)

cleanup-old-artifacts:

rules:

- if: '$CI_PIPELINE_SOURCE == "schedule"'

when: on_success

- when: never

`

Vérification : Un git push déclenche uniquement les jobs build. Le schedule déclenche uniquement cleanup-old-artifacts.


Tâche 4 : Déclencher un pipeline via l'API

GitLab permet de déclencher un pipeline via son API REST. Créez un Pipeline Trigger Token dans CI/CD → Pipeline triggers, puis déclenchez un pipeline manuellement avec curl.

Indice :

`bash

curl -X POST \

--form "token=<TRIGGER_TOKEN>" \

--form "ref=main" \

--form "variables[DEPLOY_ENV]=staging" \

"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/trigger/pipeline"

`

La variable DEPLOY_ENV sera disponible dans les jobs du pipeline déclenché. $CI_PIPELINE_SOURCE vaudra trigger dans ce cas.

Vérification : L'appel API retourne un JSON avec l'ID du pipeline déclenché. Le pipeline apparaît dans CI/CD → Pipelines avec la source "trigger".


Tâche 5 : Utiliser $CI_PIPELINE_CREATED_AT

Dans les jobs de maintenance, utilisez $CI_PIPELINE_CREATED_AT pour générer un rapport horodaté. Formatez la date pour l'inclure dans un nom de fichier d'artefact.

Indice :

`bash

# $CI_PIPELINE_CREATED_AT format : 2024-01-15T02:00:00.000Z (ISO 8601 UTC)

REPORT_DATE=$(echo $CI_PIPELINE_CREATED_AT | cut -c1-10)

echo "Rapport du $REPORT_DATE" > report-$REPORT_DATE.txt

`

Combinez avec artifacts: pour conserver les rapports de maintenance avec leur date dans le nom.

Vérification : Le fichier artefact est nommé report-2026-04-29.txt (avec la date réelle du pipeline).


🗂️ Mini-Projet : Pipeline avec scheduling et déclencheurs

Checkpoints de validation :

  • Le schedule 0 2 * * * est créé dans CI/CD → Schedules
  • maintenance-nightly n'apparaît pas sur un git push
  • En cliquant "Run" sur le schedule, seuls les jobs de maintenance s'exécutent
  • Le déclenchement API crée bien un nouveau pipeline avec source: trigger
  • Le rapport horodaté utilise $CI_PIPELINE_CREATED_AT dans son nom

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer un Schedule dans GitLab
  • Tâche 2 : Détecter le pipeline schedulé avec rules
  • Tâche 3 : Créer des jobs conditionnels push vs schedule
  • Tâche 4 : Déclencher un pipeline via l'API
  • Tâche 5 : Utiliser $CI_PIPELINE_CREATED_AT
  • 🗂️ Mini-Projet : Pipeline avec scheduling et déclencheurs