Exercice 04 : Réutiliser des templates avec include
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Utiliser
include: template:pour intégrer des templates officiels GitLab (ex: SAST) - ✅ Partager des configurations via
include: project:depuis un autre dépôt - ✅ Inclure un fichier local avec
include: local: - ✅ Créer et maintenir votre propre bibliothèque de templates CI/CD
Durée estimée : 25 minutes
Difficulté : ⭐⭐⭐⭐☆ (Avancé)
Prérequis :
- Module GitLab CI Intermédiaire complété (extends, ancres YAML)
- Accès à un groupe ou organisation GitLab
📖 Contexte
include: permet de composer un pipeline à partir de plusieurs fichiers YAML. C'est le mécanisme clé pour standardiser les pipelines à l'échelle d'une organisation : les équipes platform maintiennent des templates centraux, les équipes produit les incluent dans leurs pipelines. GitLab propose aussi des templates officiels prêts à l'emploi (SAST, DAST, code quality...).
📋 Énoncé
Créez un pipeline modulaire qui inclut un template local de déploiement, un template officiel GitLab de sécurité, et un template partagé depuis un projet central de l'organisation.
🧭 Déroulement de l'exercice
Tâche 1 : Créer et inclure un fichier local
Créez un fichier .gitlab/ci/build.yml dans votre dépôt avec un job build-app. Incluez ce fichier dans votre .gitlab-ci.yml principal avec include: local:.
Indice :
`yaml# .gitlab-ci.yml
include:
- local: .gitlab/ci/build.yml
>
stages:
- build
`
`yaml# .gitlab/ci/build.yml
build-app:
stage: build
image: node:20-alpine
script:
- echo "Build depuis le template local"
`
local:fait référence à un fichier dans le même dépôt, au même commit. Le chemin est relatif à la racine du dépôt.
Vérification : Le job build-app défini dans .gitlab/ci/build.yml apparaît dans le pipeline.
Tâche 2 : Inclure un template officiel GitLab (SAST)
Ajoutez dans include: le template officiel de SAST (Static Application Security Testing) de GitLab.
Indice :
`yamlinclude:
- template: Security/SAST.gitlab-ci.yml
`GitLab maintient des dizaines de templates officiels dans le projet
gitlab-org/gitlab. La liste complète est visible sur : https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gitlab/ci/templates
Vérification : Des jobs préfixés semgrep ou sast apparaissent automatiquement dans votre pipeline après l'include.
Tâche 3 : Inclure depuis un autre projet (templates centraux)
Simulez un projet central de templates en créant un second projet GitLab ci-templates avec un fichier deploy.yml. Incluez ce fichier dans votre projet via include: project:.
Indice :
`yamlinclude:
- project: 'mon-groupe/ci-templates'
ref: main
file: deploy.yml
`
ref:peut être une branche, un tag ou un SHA de commit. Utiliser un tag versionné (ex:ref: v1.2.0) garantit la stabilité : votre pipeline n'est pas cassé par une modification du template central.
Vérification : Le job défini dans ci-templates/deploy.yml apparaît dans votre pipeline.
Tâche 4 : Combiner plusieurs includes
Dans un seul .gitlab-ci.yml, combinez les trois types d'include : local:, template: et project:. Définissez aussi un job directement dans le fichier principal.
Indice :
`yamlinclude:
- local: .gitlab/ci/build.yml
- template: Security/SAST.gitlab-ci.yml
- project: 'mon-groupe/ci-templates'
ref: main
file: deploy.yml
`L'ordre dans
include:détermine l'ordre d'évaluation. En cas de conflit de noms de jobs, le dernier fichier inclus gagne.
Vérification : Le CI Lint valide le fichier combiné et tous les jobs des différentes sources apparaissent.
Tâche 5 : Créer un template avec des inputs
Créez un template local paramétrable avec spec: inputs: qui accepte un paramètre environment et l'utilise dans le job.
Indice :
`yaml# .gitlab/ci/deploy-template.yml
spec:
inputs:
environment:
default: staging
>
deploy-$[[ inputs.environment ]]:
script:
- echo "Déploiement sur $[[ inputs.environment ]]"
`
`yaml# .gitlab-ci.yml
include:
- local: .gitlab/ci/deploy-template.yml
inputs:
environment: production
`Les
inputssont une fonctionnalité GitLab 15.11+ qui rend les templates réellement paramétrables.
Vérification : Le job deploy-production est généré dynamiquement depuis le template avec l'input environment: production.
🗂️ Mini-Projet : Pipeline modulaire avec include
Checkpoints de validation :
- Le fichier
.gitlab/ci/build.ymlest inclus aveclocal:et son job s'exécute - Le template SAST officiel ajoute des jobs de sécurité automatiquement
include: project:fonctionne depuis un dépôt externe- La combinaison des trois includes passe le CI Lint
- Le template paramétrable avec
spec: inputs:génère un job dynamique