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, le resource_group sera deploy-staging.
  • Si ENVIRONMENT=production, il deviendra deploy-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_group est libre (staging, production, database, etc.).
  • Les jobs partageant le même resource_group s’exécutent en file d’attente.
  • Les autres jobs d’un groupe différent ne sont pas bloqués.
  • resource_group peut ê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.txt avec du contenu.
  • Empêcher l’exécution simultanée des jobs grâce à resource_group.

Corrigé