CI/CD avec GitLab
Environnement
GitLab, CI/CD, Docusaurus, Linux
Technologies
YAML, Shell, Git, JavaScript
Automatisation
Pipelines, Jobs, Stages, Déploiement continu
Avantages obtenus
- Déploiement automatisé à chaque modification
- Réduction des erreurs humaines dans le processus de déploiement
- Gain de temps considérable pour l'avancement du projet
- Amélioration des connaissances en DevOps et GitLab
Présentation du projet
Après avoir finalisé mon projet d'hébergement de site web, j'ai entrepris l'automatisation du déploiement avec GitLab CI/CD. Cette solution me permet d'éviter l'utilisation répétitive de lignes de commande pour mettre à jour mon site à chaque modification effectuée sur une de mes pages.
Ce projet représente un gain de temps considérable pour l'avancement de mon travail, tout en enrichissant mes connaissances sur GitLab et les pratiques DevOps modernes. J'ai pu explorer en profondeur les fonctionnalités de GitLab, notamment le commit de fichiers/dossiers pour la sauvegarde du projet, le partage avec d'autres collaborateurs, et surtout l'automatisation des tâches répétitives.
Défis techniques
Configuration du fichier YAML
Créer et configurer correctement le fichier .gitlab-ci.yml pour définir les étapes du pipeline CI/CD.
Solution mise en œuvre
J'ai étudié la documentation de GitLab CI/CD et analysé des exemples de configurations pour comprendre la structure du fichier YAML. J'ai ensuite créé un fichier .gitlab-ci.yml adapté à mon projet Docusaurus, en définissant les stages appropriés (build, test, deploy) et les jobs correspondants.
Configuration des runners
Configurer les runners GitLab pour exécuter les jobs définis dans le pipeline CI/CD.
Solution mise en œuvre
J'ai utilisé les runners partagés fournis par GitLab.com pour exécuter mes jobs. J'ai configuré les tags appropriés dans mon fichier .gitlab-ci.yml pour s'assurer que les jobs sont exécutés sur les runners disposant des capacités nécessaires pour mon projet.
Gestion des secrets et variables d'environnement
Sécuriser les informations sensibles (comme les clés d'accès) tout en les rendant disponibles pour le pipeline CI/CD.
Solution mise en œuvre
J'ai utilisé les variables CI/CD de GitLab pour stocker les informations sensibles. Ces variables sont masquées dans les logs et peuvent être configurées au niveau du projet ou du groupe. J'ai défini les variables nécessaires pour l'authentification et la configuration de mon environnement de déploiement.
Fonctionnement de l'automatisation avec GitLab CI/CD
Création du fichier .gitlab-ci.yml
Le fichier .gitlab-ci.yml contient des instructions pour GitLab sur les tâches à exécuter. Chaque tâche est définie sous forme de job, et les jobs sont regroupés en stages. Par exemple, vous pouvez avoir des stages comme build, test, et deploy.
stages:
- build
- test
- deploy
build-job:
stage: build
script:
- npm install
- npm run build
artifacts:
paths:
- build/Définition des stages et des jobs
Stages : Ils définissent les étapes principales du processus CI/CD. Par exemple, build pour compiler le projet, test pour exécuter les tests, et deploy pour déployer l'application.
Jobs : Ils définissent les actions spécifiques à exécuter dans chaque stage. Chaque job peut contenir des scripts shell qui s'exécutent dans l'ordre défini.
Déclenchement des pipelines
Chaque fois qu'un commit est poussé dans le dépôt, GitLab déclenche automatiquement un pipeline CI/CD. Le pipeline passe par chaque stage et exécute les jobs définis dans le fichier .gitlab-ci.yml.
Exécution des scripts
Les scripts définis dans chaque job sont exécutés. Par exemple, dans le job build, le script installe les dépendances et compile le projet. Dans le job test, les tests unitaires sont exécutés pour vérifier que le code fonctionne correctement. Enfin, dans le job deploy, le site est déployé.
Conditions et restrictions
Vous pouvez spécifier des conditions pour les jobs. Par exemple, le job deploy peut être configuré pour s'exécuter uniquement sur la branche main. Cela permet de contrôler finement quand et comment chaque job doit être exécuté.
deploy-job:
stage: deploy
script:
- npm run deploy
only:
- main # Ce job ne s'exécute que sur la branche mainAvantages de l'utilisation de GitLab CI/CD
Automatisation
Plus besoin d'exécuter manuellement les commandes pour construire, tester et déployer votre site. Le processus est entièrement automatisé, ce qui permet de gagner un temps précieux.
Consistance
Les mêmes étapes sont suivies à chaque déploiement, réduisant ainsi les risques d'erreurs humaines. Chaque déploiement est identique, ce qui garantit la fiabilité du processus.
Intégration continue
Chaque modification est immédiatement testée et déployée, assurant une livraison continue et rapide des mises à jour. Cela permet de détecter et de corriger rapidement les problèmes.
Collaboration
Le fichier .gitlab-ci.yml peut être partagé avec l'équipe, permettant à tous les membres de suivre le même processus CI/CD. Cela facilite la collaboration et standardise les pratiques.
Compétences acquises
Configuration de pipelines CI/CD
Maîtrise de la création et configuration de pipelines d'intégration et de déploiement continus
Scripting YAML
Création et modification de fichiers de configuration YAML pour définir les workflows d'automatisation
Gestion des environnements
Configuration des variables d'environnement et gestion des secrets dans un contexte CI/CD
Pratiques DevOps
Application des principes DevOps pour améliorer l'efficacité du développement et du déploiement
Conclusion
L'utilisation de GitLab CI/CD pour l'automatisation de mon site Docusaurus m'a permis de gagner en efficacité et en qualité dans le déploiement de mes mises à jour. Cette expérience m'a non seulement fait économiser un temps précieux, mais m'a également permis d'approfondir mes compétences en DevOps.
Les connaissances acquises lors de ce projet sont directement applicables à d'autres projets de développement et constituent une base solide pour des pratiques d'automatisation plus avancées. La maîtrise des outils CI/CD comme GitLab est devenue essentielle dans le domaine du développement logiciel moderne, et ce projet m'a permis de renforcer cette compétence clé pour ma carrière en DevOps.