Exercices ICT-324
Dans un pipline , plusieurs jobs et pipelines peuvent être exécuté en même temps. Cela peut causer des problèmes quand deux jobs tentent d'utiliser la même ressource. Par exemple, une base de données ou un serveur de déploiement.
Pour éviter ces situations, gitlab propose resources_group.
C'est quoi ressource_group
resource_group permet de verrouiller une ressource afin d'empêcher plusieurs jobs de l'utiliser au même temps.
Quand un job déclare resource_group, gitlab s'assure qu'un seul job à la fois avec ce nom s'execute. Les autres jobs attendent que la ressource soit libérée avant de démarrer.
Exemple simplifié
stages:
- build
- deploy
build:
stage: build
script:
- echo "Compilation du projet"
deploy_staging:
stage: deploy
script:
- echo "Déploiement sur staging..."
- sleep 10
resource_group: staging
Si deux pipelines sont déclenchés en parallèle, GitLab exécute un seul job deploy_staging à la fois. Le second attendra que le premier ait terminé.
Utiliser des variables d’environnement avec resource_group
Il est également possible d’utiliser des variables d’environnement dans la déclaration du resource_group. Cela permet de rendre le verrouillage dynamique selon le contexte du job. Par exemple, si vous souhaitez verrouiller une ressource différente selon l’environnement de déploiement (staging, production, etc.), vous pouvez intégrer une variable dans le nom du groupe.
deploy:
stage: deploy
script:
- echo "Déploiement sur $ENVIRONMENT..."
resource_group: "deploy-$ENVIRONMENT"
Dans cet exemple :
- Si
ENVIRONMENT=staging, leresource_groupseradeploy-staging. - Si
ENVIRONMENT=production, il deviendradeploy-production.
Ainsi, GitLab exécutera les déploiements vers chaque environnement indépendamment, tout en empêchant plusieurs jobs d’utiliser le même environnement en parallèle.
Points Importants
- Le nom du
resource_groupest libre (staging,production,database, etc.). - Les jobs partageant le même
resource_groups’exécutent en file d’attente. - Les autres jobs d’un groupe différent ne sont pas bloqués.
-
resource_grouppeut être combiné avec environment: pour contrôler les déploiements par environnement.
A savoir :
Le verrouillage apporté par resource_group ne fonctionne qu’à l’intérieur d’un même projet GitLab.
Si plusieurs projets utilisent un groupe du même nom, cela n’empêchera pas les jobs de s’exécuter en parallèle dans des projets différents.
Exercice
Dans cet exercice, tu vas créer un pipeline CI/CD en deux étapes.
Le but est de comprendre comment verrouiller des ressources grâce à resource_group tout en automatisant la création et l’exécution d’un script Python.
Objectf
- Générer un fichier Python (
script.py) dans un premier job. - Exécuter ce script dans un second job.
- Le script crée un fichier
output.txtavec du contenu. - Empêcher l’exécution simultanée des jobs grâce à
resource_group.