Retour aux articles

Mettre en place un pipeline CI/CD robuste avec GitLab pour applications Spring Boot/Angular

Mettre en place un pipeline CI/CD robuste avec GitLab pour applications Spring Boot/Angular | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular
Mettre en place un pipeline CI/CD robuste avec GitLab pour applications Spring Boot/Angular

Dans l'écosystème du développement logiciel moderne, la livraison continue et l'intégration continue (CI/CD) sont devenues des piliers essentiels pour garantir la qualité, la rapidité et la fiabilité des déploiements. Pour les développeurs Full Stack jonglant avec des architectures complexes comme Java Spring Boot pour le backend et Angular pour le frontend, l'établissement d'un pipeline CI/CD robuste n'est plus une option, mais une nécessité stratégique. Cet article explore comment un tel pipeline peut être mis en œuvre efficacement en utilisant GitLab CI/CD, une solution puissante et flexible.

L'intégration et la livraison continues permettent d'automatiser des étapes cruciales du cycle de vie du développement, de la compilation du code et l'exécution des tests unitaires et d'intégration, jusqu'au déploiement en production. Pour des applications comme celles que Laty Gueye Samba, développeur Full Stack basé à Dakar, réalise régulièrement, la mise en place de ces automatismes réduit considérablement les erreurs humaines, accélère les cycles de livraison et libère du temps précieux pour l'innovation et l'amélioration des fonctionnalités.

GitLab CI/CD se distingue par son intégration native au sein de la plateforme GitLab, offrant une expérience fluide du contrôle de version au déploiement. Pour des applications combinant Spring Boot et Angular, il est possible de concevoir un pipeline unifié ou des pipelines distincts, orchestrant la construction et le déploiement de chaque composant de manière indépendante ou coordonnée.

Les fondamentaux d'un pipeline CI/CD avec GitLab

Au cœur de GitLab CI/CD se trouve le fichier .gitlab-ci.yml, un fichier YAML placé à la racine du dépôt. C'est dans ce fichier que l'on définit les étapes (stages), les tâches (jobs) et les actions à exécuter pour chaque modification de code poussée vers le dépôt. Un pipeline typique pour une application Full Stack pourrait inclure des stages comme build_backend, test_backend, build_frontend, test_frontend, et deploy.

Chaque job est exécuté par un runner GitLab, qui est une machine virtuelle ou un conteneur configuré pour exécuter les scripts définis. L'utilisation de conteneurs Docker pour les runners est fortement recommandée, car elle assure un environnement d'exécution isolé et reproductible. Cela est particulièrement avantageux pour des environnements hétérogènes où Java et Node.js doivent coexister sans conflits de dépendances, un scénario courant pour un expert Java Spring Boot et Angular.

Voici une structure basique de fichier .gitlab-ci.yml illustrant les stages pour une application Spring Boot et Angular :


stages:
  - build_backend
  - test_backend
  - build_frontend
  - test_frontend
  - deploy
    

Construire et Tester l'Application Spring Boot

Pour le backend Spring Boot, les tâches du pipeline se concentrent sur la compilation du code Java, l'exécution des tests unitaires et d'intégration, et la création d'un artefact déployable (généralement un fichier JAR ou WAR). L'utilisation d'une image Docker contenant OpenJDK et Maven (ou Gradle) simplifie grandement la configuration de l'environnement.

Un aspect crucial est la gestion des dépendances. GitLab CI/CD permet la mise en cache des dépendances Maven ou Gradle, ce qui accélère considérablement les exécutions de pipeline ultérieures. Voici un exemple de configuration pour les étapes de build et de test du backend :


variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/

build_backend_job:
  stage: build_backend
  image: maven:3.8.6-openjdk-17
  script:
    - echo "Compiling Spring Boot backend..."
    - mvn clean install -DskipTests
  artifacts:
    paths:
      - backend/target/*.jar
    expire_in: 1 week

test_backend_job:
  stage: test_backend
  image: maven:3.8.6-openjdk-17
  script:
    - echo "Running Spring Boot backend tests..."
    - mvn test
  dependencies:
    - build_backend_job
    

Dans des projets de gestion des risques ou d'applications métier complexes, il est souvent vital de s'assurer que tous les tests passent avant toute progression dans le pipeline. Cela garantit la stabilité et la conformité du code avec les exigences fonctionnelles et non fonctionnelles.

Intégrer et Déployer l'Application Angular

Le frontend Angular suit un processus similaire, avec des tâches dédiées à l'installation des dépendances Node.js, à la compilation de l'application (build), à l'exécution des tests unitaires (Karma/Jasmine) et end-to-end (Cypress/Protractor), et enfin au déploiement des fichiers statiques générés.

L'image Docker pour les runners doit contenir Node.js et npm (ou yarn). Comme pour Maven, la mise en cache des modules npm est essentielle pour optimiser les performances du pipeline. Le déploiement peut consister à copier les fichiers statiques vers un serveur web (Nginx, Apache) ou un service de stockage d'objets (comme AWS S3), ou encore à les intégrer dans une image Docker.


cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - frontend/node_modules/
    - ~/.npm/

build_frontend_job:
  stage: build_frontend
  image: node:18-alpine
  script:
    - echo "Installing Angular dependencies and building frontend..."
    - cd frontend
    - npm install --prefer-offline --ci
    - npm run build -- --configuration=production
  artifacts:
    paths:
      - frontend/dist/frontend/
    expire_in: 1 week

test_frontend_job:
  stage: test_frontend
  image: node:18-alpine
  script:
    - echo "Running Angular frontend tests..."
    - cd frontend
    - npm install --prefer-offline --ci
    - npm test -- --watch=false --browsers=ChromeHeadless
  dependencies:
    - build_frontend_job
    

Orchestrer le Déploiement Complet

Une fois les artefacts du backend (JAR/WAR) et du frontend (fichiers statiques) générés, l'étape de déploiement entre en jeu. Pour des applications Full Stack, cela implique souvent de créer des images Docker pour chaque composant et de les pousser vers un registre d'images (comme le Container Registry intégré de GitLab). Le déploiement final peut ensuite être orchestré vers des environnements tels que Kubernetes, Docker Swarm ou des serveurs virtuels.


deploy_job:
  stage: deploy
  image: docker:latest
  services:
    - docker:dind
  script:
    - echo "Logging into GitLab Container Registry..."
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - echo "Building and pushing backend Docker image..."
    - docker build -t $CI_REGISTRY_IMAGE/backend:$CI_COMMIT_SHORT_SHA ./backend
    - docker push $CI_REGISTRY_IMAGE/backend:$CI_COMMIT_SHORT_SHA
    - echo "Building and pushing frontend Docker image..."
    - docker build -t $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHORT_SHA ./frontend
    - docker push $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHORT_SHA
    - echo "Deployment script (e.g., to Kubernetes) goes here."
  environment:
    name: production
  only:
    - master # Déployer uniquement sur la branche master
    

Cette approche par conteneurs est particulièrement efficace pour les développeurs Full Stack à Dakar travaillant sur des systèmes ERP ou des applications de gestion hospitalière, où la portabilité et la cohérence de l'environnement de déploiement sont primordiales.

Point de vue : développeur full stack à Dakar

Pour un développeur Full Stack travaillant sur des systèmes comme des applications de gestion des risques ou des plateformes de services numériques au Sénégal, la maîtrise de l'intégration et de la livraison continues avec GitLab représente un avantage concurrentiel réel sur le marché technologique africain, en pleine expansion. Laty Gueye Samba, développeur Full Stack à Dakar, reconnaît l'importance de ces pratiques pour livrer des solutions robustes et fiables, garantissant ainsi la satisfaction des clients et la performance des projets.

Conclusion

La mise en place d'un pipeline CI/CD robuste avec GitLab pour des applications Spring Boot et Angular est une étape fondamentale vers une ingénierie logicielle de haute qualité. Elle assure non seulement une intégration et un déploiement rapides et fiables, mais aussi une meilleure collaboration au sein des équipes de développement.

En automatisant les processus répétitifs, les développeurs peuvent se concentrer sur l'ajout de valeur métier et l'innovation. Pour un développeur Full Stack tel que Laty Gueye Samba, expert Java Spring Boot et Angular, l'adoption de ces pratiques est synonyme d'efficacité, de qualité et de leadership technique dans la région de Dakar et au-delà.

Pour approfondir ce sujet, il est recommandé de consulter les ressources officielles :

À propos de l'auteur

Laty Gueye Samba est développeur Full Stack basé à Dakar, Sénégal. Spécialiste des écosystèmes Java / Spring Boot et Angular.

Contact : latygueyesamba@gmail.com  |  Dakar, Sénégal