Maîtriser GitLab CI/CD


Sommaire

Qu’est-ce que GitLab CI/CD ?

GitLab CI/CD est un outil d’intégration et de déploiement continus intégré directement dans GitLab. Il permet d’automatiser les processus de construction, de test et de déploiement du code, ce qui réduit les erreurs humaines et accélère le cycle de développement. En l’utilisant, les équipes peuvent collaborer plus efficacement et livrer des logiciels de haute qualité plus rapidement.

Les pipelines CI/CD

Un pipeline est une série de jobs (tâches) qui s’exécutent dans un ordre spécifique. Les pipelines sont définis dans un fichier .gitlab-ci.yml à la racine du dépôt. Ils peuvent être déclenchés par divers événements tels que des commits, des merges ou des tags. Les pipelines sont composés de stages (étapes) et de jobs, où chaque stage peut contenir plusieurs jobs qui s’exécutent en parallèle.

Les runners GitLab

Les runners sont des agents qui exécutent les jobs définis dans vos pipelines. Ils peuvent être hébergés sur vos propres serveurs ou utiliser les runners partagés de GitLab. Les runners peuvent être configurés pour utiliser différents exécutants tels que Docker, Shell, ou Kubernetes, offrant une grande flexibilité dans l’environnement d’exécution.


Configuration initiale de GitLab CI/CD

Installation de GitLab Runner

Pour utiliser un runner, vous devez installer GitLab Runner sur une machine qui exécutera les jobs. Voici comment procéder sur une machine Linux :

1. Télécharger le binaire de GitLab Runner :

curl -L --output gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

2. Rendre le binaire exécutable :

chmod +x gitlab-runner

3. Déplacer le binaire vers le répertoire global :

sudo mv gitlab-runner /usr/local/bin/

4. Créer un utilisateur pour GitLab Runner :

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

5. Installer et démarrer le service :

sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner sudo gitlab-runner start

Enregistrement d’un runner avec votre projet GitLab

Après l’installation, vous devez enregistrer le runner avec votre projet:

1. Obtenir le token d’enregistrement :

  • Allez dans votre projet.
  • Naviguez vers Settings > CI/CD > Runners.
  • Copiez le token sous Specific Runners.

2. Exécuter la commande d’enregistrement :

sudo gitlab-runner register

3. Fournir les informations requises :

  • URL de GitLab : https://gitlab.com/ ou l’URL de votre instance auto-hébergée.
  • Token d’enregistrement : Collez le token copié précédemment.
  • Description du runner : Donnez un nom descriptif.
  • Tags : (Optionnel) Pour cibler le runner lors de l’exécution des jobs.
  • Exécuteur : Choisissez entre shell, docker, docker+machine, etc.

Configuration des variables d’environnement dans GitLab

Les variables d’environnement sont essentielles pour stocker des informations sensibles ou des configurations spécifiques. Pour les définir :

  • Allez dans Settings > CI/CD > Variables.
  • Cliquez sur Add Variable.
  • Entrez le Key (nom de la variable) et le Value (valeur).
  • Vous pouvez masquer la variable pour qu’elle ne soit pas affichée dans les logs.

Création d’un pipeline de base avec GitLab CI/CD

Structure du fichier .gitlab-ci.yml

Le fichier .gitlab-ci.yml définit les pipelines et est composé de jobs, de stages, et de configurations globales. Voici une structure de base :

stages:
  - build
  - test
  - deploy

variables:
  PROJECT_NAME: "mon-application"

before_script:
  - echo "Démarrage du pipeline pour $PROJECT_NAME"

after_script:
  - echo "Fin du pipeline"

build_job:
  stage: build
  script:
    - echo "Compilation du code..."
    - make build

test_job:
  stage: test
  script:
    - echo "Exécution des tests..."
    - make test

deploy_job:
  stage: deploy
  script:
    - echo "Déploiement de l'application..."
    - make deploy

Les jobs et les stages

  • Jobs : Représentent des tâches individuelles à exécuter (compilation, tests, déploiement).
  • Stages : Groupent les jobs en phases du pipeline (build, test, deploy). Les jobs d’un même stage s’exécutent en parallèle.

Exemple simple de pipeline

Dans l’exemple ci-dessus, le pipeline comporte trois stages :

  1. Build : Compile le code source.
  2. Test : Exécute les tests unitaires.
  3. Deploy : Déploie l’application si les étapes précédentes sont réussies.
Representation Build, test, deploy

Étendre l’utilisation de pipelines dans Gitlab

Utilisation des artifacts

Les artifacts sont des fichiers générés par un job et transmis aux jobs suivants ou stockés pour téléchargement. Pour les utiliser :

build_job:
  stage: build
  script:
    - make build
  artifacts:
    paths:
      - build/
    expire_in: 1 week

Définition des dépendances entre jobs

Vous pouvez spécifier les dépendances entre jobs pour contrôler l’ordre d’exécution et l’utilisation des artifacts :

test_job:
  stage: test
  script:
    - make test
  dependencies:
    - build_job

Utilisation des caches pour accélérer les builds

Le cache stocke des fichiers entre les jobs pour réduire le temps de téléchargement ou de compilation :

cache:
  paths:
    - .m2/repository  # Pour les dépendances Maven
    - node_modules/   # Pour les dépendances Node.js

Scénarios avancés

Pipelines multi-projets

Les pipelines multi-projets permettent de déclencher un pipeline dans un autre projet :

trigger_downstream:
  stage: deploy
  trigger:
    project: groupe/autre-projet
    branch: master

Pipelines déclenchés

Vous pouvez déclencher des pipelines manuellement ou via des API externes. Pour un déclenchement manuel :

manual_job:
  stage: deploy
  script:
    - echo "Déploiement manuel"
  when: manual

Utilisation des templates et des includes

Pour réutiliser du code entre plusieurs pipelines, utilisez l’instruction include :

include:
  - template: 'Workflows/Maven.gitlab-ci.yml'

Sécurité et bonnes pratiques

Gestion des secrets et variables protégées dans Gitlab CI CD

  • Variables protégées : Ne sont accessibles que dans les pipelines des branches protégées.
  • Masquage des variables : Les valeurs ne sont pas affichées dans les logs.

Mise en place des règles de protection des branches

  • Empêcher les commits directs sur master ou main.
  • Exiger des merge requests et des approbations pour les modifications.

Audit et conformité avec Gitlab CI CD

  • Activer les logs d’audit pour suivre les actions des utilisateurs.
  • Utiliser des outils de scanning de sécurité intégrés pour détecter les vulnérabilités.

Déploiement continu dans Gitlab CI CD

Déploiement vers des environnements de staging et de production

Configurer des environnements permet de gérer les déploiements vers différents stages :

deploy_staging:
  stage: deploy
  script:
    - make deploy-staging
  environment:
    name: staging
    url: https://staging.example.com
  only:
    - develop

deploy_production:
  stage: deploy
  script:
    - make deploy-production
  environment:
    name: production
    url: https://www.example.com
  only:
    - main

Stratégies de déploiement: blue/green et canary releases

  • Blue/Green Deployment : Maintenir deux environnements identiques et basculer le trafic après les tests.
  • Canary Releases : Déployer progressivement la nouvelle version à un sous-ensemble d’utilisateurs pour limiter l’impact des éventuels problèmes.

Intégration avec Kubernetes pour le déploiement

GitLab CI/CD s’intègre facilement avec Kubernetes pour le déploiement d’applications conteneurisées.

Étapes pour l’intégration :

  1. Ajouter le cluster Kubernetes à GitLab :
    • Naviguez vers Operations > Kubernetes dans votre projet.
    • Cliquez sur Add Kubernetes cluster.
  2. Configurer le déploiement dans .gitlab-ci.yml :
deploy_to_kubernetes:
  stage: deploy
  image: bitnami/kubectl:latest
  script:
    - kubectl apply -f k8s/
  environment:
    name: production
Representation integration ci cd et kubernetes

Monitoring et troubleshooting

Surveillance des pipelines

  • Utilisez l’interface de GitLab pour surveiller l’état des pipelines.
  • Intégrez des outils de monitoring comme Prometheus pour une surveillance approfondie.

Résolution des erreurs communes dans Gitlab CI CD

  • Erreurs de syntaxe dans .gitlab-ci.yml : Validez le fichier avec le linter intégré de GitLab.
  • Problèmes de permissions : Vérifiez les droits d’accès aux runners et aux ressources externes.
  • Échecs intermittents : Identifiez les dépendances non stables ou les problèmes de ressources.

Optimisation des performances

  • Paralléliser les jobs : Utilisez plusieurs runners pour exécuter des jobs en parallèle.
  • Utiliser des images Docker optimisées : Réduisez la taille des images pour accélérer les téléchargements.
  • Mettre en cache les dépendances : Évitez de retélécharger les mêmes dépendances à chaque exécution.

Conclusion

GitLab est un outil puissant qui, lorsqu’il est utilisé efficacement, peut transformer la façon dont on peut livrer un logiciel. En exploitant ses fonctionnalités avancées, on peut automatiser l’intégralité du cycle de développement, du code au déploiement, tout en maintenant des normes élevées de qualité et de sécurité.


Ressources supplémentaires 

Representation globale gitlab ci cd

,