Aller au contenu

🩊 Configuration GitLab CI - Guide Rapide

Date : 2025-11-12 Durée : 10 minutes


📋 Vue d'ensemble

Votre pipeline GitLab CI est déjà configuré dans .gitlab-ci.yml.

5 stages configurés : 1. terraform : Déploiement infrastructure 2. ansible : Configuration serveurs 3. test : Tests d'intégration 4. deploy : Déploiement application 5. verify : Vérification post-déploiement


⚙ Configuration requise (5 min)

1. Variables GitLab CI/CD

Dans votre projet GitLab : Settings → CI/CD → Variables → Expand → Add variable

Variable SSH_PRIVATE_KEY

ParamĂštre Valeur
Key SSH_PRIVATE_KEY
Value Contenu de votre clé privée SSH
Type File
Environment scope All
Protect variable ✅ Oui
Mask variable ✅ Oui
# Pour obtenir votre clé SSH
cat ~/.ssh/id_rsa
# Copier tout le contenu (y compris -----BEGIN/END-----)

Variable SLACK_WEBHOOK_URL (Optionnel)

ParamĂštre Valeur
Key SLACK_WEBHOOK_URL
Value https://hooks.slack.com/services/YOUR/WEBHOOK/URL
Type Variable
Protect variable ✅ Oui
Mask variable ✅ Oui

🕐 2. Pipeline Schedule - ExĂ©cution Quotidienne (3 min)

Dans votre projet GitLab : CI/CD → Schedules → New schedule

ParamĂštre Valeur
Description Daily Integration Tests
Interval Pattern 0 2 * * *
Cron timezone UTC ou votre timezone
Target branch main ou develop
Activated ✅ Oui

Variables optionnelles : - Nom : RUN_TYPE - Valeur : scheduled


🏃 3. Runner Configuration (VĂ©rification)

Le pipeline utilise 3 types de runners selon les jobs :

Tag Usage Localisation
ovh-docker Build, tests, sonar VPS OVH (Docker)
ovh-shell SSH, Terraform, Ansible VPS OVH (Shell)
ovh-internet Lint, tests réseau externes VPS OVH (Docker bridge)

Vérifier les runners

Settings → CI/CD → Runners → Expand

Vérifier que les runners suivants sont disponibles et actifs :

  • ✅ ovh-docker : Runner Docker avec privileged=true
  • ✅ ovh-shell : Runner Shell pour les commandes SSH/Ansible
  • ✅ ovh-internet : Runner Docker en mode bridge (isolation rĂ©seau)

Si runners OVH manquants :

  1. Exécuter le playbook Ansible pour configurer les runners
  2. Documentation : docs/infra/cicd.md

🚀 Utilisation

Déclencheurs automatiques

Le pipeline s'exécute automatiquement sur :

ÉvĂ©nement Stage Jobs
Push main/develop test integration-tests
Merge Request test integration-tests
Pipeline Schedule (quotidien) test integration-tests
Exécution manuelle test integration-tests
Tag (release) test, deploy, verify pre-deployment-tests, deploy-api, post-deployment-tests

Exécution manuelle

CI/CD → Pipelines → Run pipeline

  1. Sélectionner la branche
  2. (Optionnel) Ajouter des variables
  3. Run pipeline

Exécution d'un job spécifique

Dans une pipeline en cours : 1. Cliquer sur le job 2. Retry ou Play (pour les jobs manuels)


📊 RĂ©sultats

Visualiser les pipelines

CI/CD → Pipelines

  • ✅ Status de chaque stage
  • 📊 DurĂ©e d'exĂ©cution
  • 📄 Logs dĂ©taillĂ©s par job

Artifacts (Rapports de tests)

Dans chaque pipeline : 1. Cliquer sur le job integration-tests 2. Browse dans la section Artifacts 3. Télécharger les rapports HTML

Rétention : 30 jours

Metrics dans Grafana

AprÚs chaque exécution : - Dashboard : http://51.68.126.160:3001/d/integration-tests - Prometheus : http://51.68.126.160:9090


🔍 Workflow des jobs

Job : integration-tests

Stage : test Trigger : Push, MR, Schedule, Manuel

1. Configuration SSH
2. Connexion au serveur DEV
3. Exécution des tests
4. Téléchargement des rapports
5. Vérification des métriques Prometheus
6. Validation success rate ≄ 95%

Artifacts : Rapports HTML et texte (30 jours)

Job : pre-deployment-tests

Stage : test Trigger : Tag, Manuel

1. Exécution des tests complets
2. VĂ©rification success rate ≄ 95%
3. Bloque le déploiement si échec

Job : deploy-api

Stage : deploy Trigger : Tag, Manuel Needs : pre-deployment-tests (optionnel)

1. Exécution du playbook deploy_with_tests.yml
2. Déploiement de l'application

Job : post-deployment-tests

Stage : verify Trigger : AprĂšs deploy-api

1. Vérification API health
2. Smoke tests
3. Validation du déploiement

Job : notify-failure

Stage : .post Trigger : En cas d'échec du pipeline

Envoie une notification Slack avec : - Projet - Branche - Commit - Lien vers le pipeline - Lien vers le dashboard Grafana


🎯 Workflow de dĂ©ploiement complet

Déploiement standard (via tag)

# 1. Créer un tag
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0

# Le pipeline s'exécute automatiquement :
# Stage 1 (test) : pre-deployment-tests
# Stage 2 (deploy) : deploy-api
# Stage 3 (verify) : post-deployment-tests

Déploiement manuel

CI/CD → Pipelines → Run pipeline

  1. Sélectionner la branche
  2. (Optionnel) Ajouter variable : CI_PIPELINE_SOURCE=web
  3. Run pipeline
  4. Le job deploy-api est en mode manual
  5. Cliquer sur Play pour déployer

đŸ›Ąïž SĂ©curitĂ©

Variables protégées

Les variables SSH_PRIVATE_KEY et SLACK_WEBHOOK_URL sont : - ✅ Protected : Utilisables uniquement sur branches/tags protĂ©gĂ©s - ✅ Masked : Jamais affichĂ©es dans les logs

Branches protégées

Recommandation : Settings → Repository → Protected branches

  • main : Protected
  • develop : Protected
  • Allowed to merge : Maintainers
  • Allowed to push : No one

📈 Monitoring

Success Rate

Le pipeline valide automatiquement : - ✅ Success rate ≄ 95% - ✅ DurĂ©e ≀ 10 minutes - ✅ Aucun test Ă©chouĂ©

Si validation Ă©choue → Pipeline FAILED ❌

Dashboard Grafana

9 panneaux : 1. Success Rate (gauge) 2. Tests Passed vs Failed (stats) 3. Last Test Run (timestamp) 4. Success Rate by Suite (bar gauge) 5. Duration by Suite (bar gauge) 6. Success Rate Trend (time series) 7. Tests Passed Over Time (time series) 8. Test Duration Trend (time series) 9. Detailed Metrics (table)


🐛 Troubleshooting

Erreur : "Permission denied (publickey)"

Cause : Clé SSH mal configurée

Solution : 1. Vérifier la variable SSH_PRIVATE_KEY dans GitLab 2. S'assurer qu'elle contient la clé privée complÚte 3. Vérifier que la clé publique est sur le serveur :

ssh ubuntu@51.68.126.160 "cat ~/.ssh/authorized_keys"

Erreur : "Runner not found"

Cause : Aucun runner avec le tag demandé (ovh-docker ou ovh-shell)

Solution :

  1. VĂ©rifier les runners sur GitLab : Settings → CI/CD → Runners
  2. Exécuter le playbook Ansible pour configurer les runners
  3. Vérifier que les tags sont corrects :
  4. ovh-docker pour les jobs Docker
  5. ovh-shell pour les jobs SSH/Ansible

Erreur : "Tests failed"

Cause : Tests réellement échoués ou infrastructure cassée

Solution : 1. Voir les logs du job dans GitLab 2. Télécharger les artifacts (rapports HTML) 3. Consulter Grafana : http://51.68.126.160:3001/d/integration-tests 4. Se connecter au serveur et exécuter manuellement :

ssh ubuntu@51.68.126.160
cd /opt/probatiovault/tests
sudo bash run_all_tests.sh

Pipeline bloqué sur "Pending"

Cause : Runner occupé ou inactif

Solution : 1. VĂ©rifier l'Ă©tat du runner : Settings → CI/CD → Runners 2. RedĂ©marrer le runner si nĂ©cessaire 3. Augmenter le concurrent du runner


📚 Ressources

Document Description
.gitlab-ci.yml Configuration du pipeline
docs/CICD_INTEGRATION.md Guide complet CI/CD
CICD_SUMMARY.md Résumé rapide
deploy_with_tests.yml Playbook de déploiement

✅ Checklist de configuration

  • Variable SSH_PRIVATE_KEY configurĂ©e (Type: File, Protected, Masked)
  • Variable SONAR_TOKEN configurĂ©e (Protected, Masked)
  • Variable SLACK_WEBHOOK_URL configurĂ©e (optionnel)
  • Pipeline Schedule créé (quotidien 2h)
  • Runner ovh-docker disponible et actif
  • Runner ovh-shell disponible et actif
  • Runner ovh-internet disponible et actif
  • Branches main et develop protĂ©gĂ©es (recommandĂ©)
  • .gitlab-ci.yml committĂ© et pushĂ©
  • PremiĂšre exĂ©cution manuelle testĂ©e
  • Artifacts vĂ©rifiĂ©s (rapports HTML)
  • Dashboard Grafana accessible
  • MĂ©triques Prometheus visibles
  • Notification Slack testĂ©e (si configurĂ©)

🎉 PrĂȘt Ă  l'emploi

Votre pipeline GitLab CI est maintenant configuré !

Prochaines étapes : 1. Pusher un commit sur main ou develop 2. Vérifier que le pipeline s'exécute 3. Consulter les résultats dans Grafana 4. Configurer le schedule quotidien 5. Tester un déploiement avec tag

Monitoring : - 📊 GitLab Pipelines : Votre projet → CI/CD → Pipelines - 📈 Grafana : http://51.68.126.160:3001/d/integration-tests - 🔍 Prometheus : http://51.68.126.160:9090


Temps de configuration : 10 minutes Status : ✅ PrĂȘt Ă  l'emploi