Pipeline GitLab CI/CD¶
Vue d'ensemble¶
Le pipeline GitLab automatise le déploiement de tous les services du serveur IA via Ansible.
Workflow : Code local → GitLab → CI/CD → Serveur IA (192.168.1.82)
Architecture du pipeline¶
Stages¶
┌──────────────┐
│ 1. Validate │ → Syntaxe Terraform/Ansible
├──────────────┤
│ 2. Plan │ → Terraform plan
├──────────────┤
│ 3. Apply │ → Déploiement services (manuel)
├──────────────┤
│ 4. Test │ → Tests post-déploiement
└──────────────┘
Jobs disponibles (Stage Apply)¶
| Job | Description | Déclenchement | URL |
|---|---|---|---|
ansible:install-ollama | Déploie Ollama + modèles LLM | Manuel | http://192.168.1.82:11434 |
ansible:install-plex | Déploie Plex + montage NAS | Manuel | http://192.168.1.82:32400/web |
ansible:install-homer | Déploie Homer Dashboard | Manuel | http://192.168.1.82:8080 |
ansible:install-mkdocs | Déploie MkDocs docs | Manuel | http://192.168.1.82:8000 |
Tous les jobs sont manuels pour éviter les déploiements accidentels.
Configuration requise¶
1. GitLab Runner¶
Le runner doit être enregistré sur le serveur IA avec les tags : - ia-server - shell
Vérification :
2. Variables CI/CD¶
Variable requise pour Plex :
- Nom :
ANSIBLE_VAULT_PASSWORD - Valeur :
YsepMjCo/T1y2M79RsZYW52CWNDW+k3PL98WFu+7Jb4= - Type : Masked
- Protected : ✅ (seulement sur branche main)
Configuration :
- GitLab → Settings → CI/CD → Variables
- Add variable :
- Key:
ANSIBLE_VAULT_PASSWORD - Value: (copier le mot de passe vault)
- Type: Variable
- Flags: ☑️ Mask variable, ☑️ Protect variable
3. Fichier vault.yml sur le serveur¶
Le fichier ansible/vault.yml doit être présent sur le serveur (protégé par .gitignore).
Copie initiale :
# Depuis votre machine locale
scp /Users/loic/Developpement/ProbatioVault/ProbatioVault-IA-Server/ansible/vault.yml \
ProbatioVault-IA-Server:/opt/probatiovault-ia-server/ansible/vault.yml
Vérification :
Utilisation du pipeline¶
Workflow standard¶
- Modifier un playbook en local :
- Commit et push :
git add ansible/playbooks/install-homer.yml
git commit -m "feat(homer): add new service to dashboard"
git push origin main
- Accéder au pipeline GitLab :
Aller sur : https://gitlab.com/probatiovault/probatiovault-ia-server/-/pipelines
-
Approuver le job manuel :
-
Cliquer sur le pipeline créé
- Onglet "Jobs"
- Cliquer sur le bouton ▶️ du job souhaité (ex:
ansible:install-homer) -
Confirmer le déploiement
-
Suivre les logs :
Les logs s'affichent en temps réel dans l'interface GitLab.
- Vérifier le déploiement :
Accéder à l'URL du service (ex: http://192.168.1.82:8080)
Déploiement initial (tous les services)¶
Pour déployer tous les services d'un coup :
Via jobs manuels (recommandé pour contrôle fin) :
- Lancer
ansible:install-ollama→ Attendre fin - Lancer
ansible:install-plex→ Attendre fin - Lancer
ansible:install-homer→ Attendre fin - Lancer
ansible:install-mkdocs→ Attendre fin
Via SSH (pour tests locaux) :
ssh ProbatioVault-IA-Server
cd /opt/probatiovault-ia-server
# Déployer tous les services
for playbook in ansible/playbooks/install-*.yml; do
echo "Deploying $playbook..."
ansible-playbook -i ansible/inventory/hosts "$playbook"
done
Environnements GitLab¶
Chaque job déploie dans un environnement GitLab :
production/ollama→ http://192.168.1.82:11434production/plex→ http://192.168.1.82:32400/webproduction/homer→ http://192.168.1.82:8080production/mkdocs→ http://192.168.1.82:8000
Avantage : Historique des déploiements dans GitLab → Deployments
Troubleshooting¶
Job échoue : "vault.yml not found"¶
Cause : Le fichier ansible/vault.yml n'est pas sur le serveur.
Solution :
Job échoue : "Decryption failed"¶
Cause : Mauvais mot de passe vault dans ANSIBLE_VAULT_PASSWORD.
Solution :
- Vérifier le mot de passe vault localement :
cat ansible/vault.yml # Doit afficher $ANSIBLE_VAULT;1.1;AES256
echo "YsepMjCo/T1y2M79RsZYW52CWNDW+k3PL98WFu+7Jb4=" > /tmp/vault-pass
ansible-vault view ansible/vault.yml --vault-password-file /tmp/vault-pass
rm /tmp/vault-pass
- Mettre à jour la variable CI/CD dans GitLab avec le bon mot de passe.
Runner non disponible¶
Cause : Le runner GitLab n'est pas démarré sur le serveur.
Solution :
Job bloqué en "pending"¶
Cause : Aucun runner avec les tags ia-server + shell.
Solution :
- Vérifier les runners disponibles :
GitLab → Settings → CI/CD → Runners
- Vérifier que le runner du serveur IA est bien enregistré et actif.
Playbook échoue sur une tâche¶
Cause : Erreur dans le playbook Ansible.
Solution :
-
Lire les logs du job dans GitLab pour identifier la tâche en échec.
-
Tester localement en SSH :
ssh ProbatioVault-IA-Server
cd /opt/probatiovault-ia-server
ansible-playbook -i ansible/inventory/hosts ansible/playbooks/install-xxx.yml -vvv
- Corriger le playbook en local, commit, push, relancer le job.
Bonnes pratiques¶
1. Toujours tester la syntaxe avant de commit¶
2. Utiliser des commits atomiques¶
Un playbook = un commit = un job isolé
git add ansible/playbooks/install-homer.yml
git commit -m "feat(homer): add monitoring service to dashboard"
git push
3. Surveiller les logs en temps réel¶
Ne pas fermer l'onglet GitLab pendant le déploiement pour suivre les logs.
4. Rollback en cas d'échec¶
ssh ProbatioVault-IA-Server
cd /opt/probatiovault-ia-server
git log --oneline # Trouver le dernier commit stable
git checkout <commit-stable>
ansible-playbook -i ansible/inventory/hosts ansible/playbooks/install-xxx.yml
git checkout main
5. Documenter les changements¶
Chaque modification de playbook doit être documentée dans le commit message :
git commit -m "feat(plex): add transcoding GPU support
- Enable hardware transcoding on RTX 5090
- Update Plex preferences template
- Tested with 4K HDR content"
Limitations¶
Jobs manuels uniquement¶
Tous les jobs de déploiement sont manuels pour éviter :
- Déploiements accidentels sur push
- Conflits si plusieurs MR simultanées
- Déploiements non testés en production
Avantage : Contrôle total sur quand déployer.
Un seul environnement (production)¶
Pas de staging/dev pour le moment (serveur unique).
Évolution future : Ajouter un environnement de test virtuel (VM locale).
Évolutions futures¶
1. Tests automatisés post-déploiement¶
Ajouter des jobs de test après chaque déploiement :
test:plex:
stage: test
script:
- curl -f http://192.168.1.82:32400/web || exit 1
dependencies:
- ansible:install-plex
2. Notifications Slack/Email¶
Alertes en cas d'échec de déploiement.
3. Rollback automatique¶
Si les tests échouent, rollback automatique vers la version précédente.
4. Environnement de staging¶
VM de test pour valider avant production.
Résumé¶
✅ Pipeline configuré : 4 jobs de déploiement (Ollama, Plex, Homer, MkDocs) ✅ Approbation manuelle : Contrôle total sur les déploiements ✅ Environnements GitLab : Historique des déploiements ✅ Secrets sécurisés : Vault password via variable CI/CD masquée ✅ IaC complet : Tout est versionné et reproductible
Point d'entrée : https://gitlab.com/probatiovault/probatiovault-ia-server/-/pipelines