Retour aux articles

Déploiement continu d'applications Full Stack (Spring Boot + Angular) avec GitLab CI/CD et Docker

Déploiement continu d'applications Full Stack (Spring Boot + Angular) avec GitLab CI/CD et Docker | Laty Gueye Samba - Développeur Full Stack Dakar Sénégal, Expert Java Spring Boot Angular

Déploiement continu d'applications Full Stack (Spring Boot + Angular) avec GitLab CI/CD et Docker

Le développement d'applications full stack modernes, combinant un backend robuste comme Spring Boot et un frontend dynamique tel qu'Angular, présente des défis uniques en matière de déploiement. Pour maintenir un rythme de livraison rapide, garantir la fiabilité et simplifier la gestion des environnements, l'adoption de pratiques de déploiement continu est devenue indispensable. Cet article explore comment GitLab CI/CD, combiné à la puissance de Docker, permet d'automatiser et de rationaliser le cycle de vie du déploiement pour ces architectures complexes.

En tant que Développeur Full Stack (Java Spring Boot + Angular) basé à Dakar, Laty Gueye Samba rencontre régulièrement ces défis et souligne l'importance de maîtriser les outils et les méthodologies qui facilitent une intégration et un déploiement continus efficaces. L'objectif est de transformer un processus souvent manuel et source d'erreurs en un pipeline automatisé, reproductible et robuste.

Cette approche permet non seulement de réduire les risques lors des mises à jour, mais aussi d'accélérer le temps de mise sur le marché des nouvelles fonctionnalités. Pour un développeur full stack à Dakar, Sénégal, comme Laty Gueye Samba, l'expertise en GitLab CI/CD et Docker est un atout majeur pour livrer des solutions logicielles de haute qualité, que ce soit pour des applications métier complexes ou des systèmes ERP.

Dockerisation des applications Spring Boot et Angular

La première étape vers un déploiement continu efficace est la containerisation des différentes composantes de l'application. Docker offre un moyen standardisé de packager une application et toutes ses dépendances dans une unité autonome, garantissant qu'elle fonctionnera de la même manière quel que soit l'environnement.

Backend Spring Boot

Pour une application Spring Boot, un Dockerfile est créé pour construire une image Docker contenant l'application Java compilée et une JVM pour l'exécuter. Il est recommandé d'utiliser une image de base légère et de s'appuyer sur des builds en plusieurs étapes pour minimiser la taille de l'image finale.


# Étape de build
FROM maven:3.8.6-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# Étape d'exécution
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Frontend Angular

L'application Angular nécessite également une containerisation. L'approche courante consiste à construire l'application dans une première étape, puis à servir les fichiers statiques résultants avec un serveur web léger comme Nginx dans une image finale.


# Étape de build
FROM node:18-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build --configuration=production

# Étape de service
FROM nginx:alpine
COPY --from=build /app/dist/votre-app-angular /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

GitLab CI/CD pour l'automatisation du build et du test

GitLab CI/CD est une plateforme intégrée qui permet de définir des pipelines d'intégration et de déploiement continus directement dans le dépôt de code. Le fichier .gitlab-ci.yml, placé à la racine du projet, décrit les étapes et les jobs à exécuter.

Un pipeline typique pour une application full stack inclura des étapes de build, de test et de déploiement pour les deux parties de l'application.

Exemple de .gitlab-ci.yml simplifié


stages:
  - build
  - test
  - package
  - deploy

variables:
  DOCKER_IMAGE_BACKEND: $CI_REGISTRY_IMAGE/backend:$CI_COMMIT_SHORT_SHA
  DOCKER_IMAGE_FRONTEND: $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHORT_SHA

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

build_frontend:
  stage: build
  image: node:18-alpine
  script:
    - echo "Building Angular frontend..."
    - npm install
    - npm run build --configuration=production
  artifacts:
    paths:
      - frontend/dist/votre-app-angular/
    expire_in: 1 week

test_backend:
  stage: test
  image: maven:3.8.6-openjdk-17
  script:
    - echo "Running backend tests..."
    - mvn test

test_frontend:
  stage: test
  image: node:18-alpine
  script:
    - echo "Running frontend tests..."
    - npm test

package_backend:
  stage: package
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  script:
    - docker build -t $DOCKER_IMAGE_BACKEND ./backend
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push $DOCKER_IMAGE_BACKEND

package_frontend:
  stage: package
  image: docker:20.10.16
  services:
    - docker:20.10.16-dind
  script:
    - docker build -t $DOCKER_IMAGE_FRONTEND ./frontend
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push $DOCKER_IMAGE_FRONTEND

Stratégie de déploiement continu avec Docker Registries et environnements

Une fois les images Docker construites et testées, elles sont poussées vers un registre d'images (tel que le GitLab Container Registry). Ce registre sert de source unique de vérité pour les artefacts déployables. La phase de déploiement utilise ensuite ces images pour mettre à jour les applications sur les différents environnements (développement, staging, production).

Le déploiement peut être effectué de diverses manières, allant de scripts SSH simples à l'orchestration avancée avec Docker Compose ou Kubernetes. Pour les projets gérés par un Développeur Full Stack Java Spring Boot + Angular comme Laty Gueye Samba, il est courant de voir des stratégies adaptées aux besoins spécifiques du projet et de l'infrastructure.

Exemple de déploiement simple via SSH

Ce job serait déclenché après la phase de package et déploierait les images sur un serveur distant.


deploy_to_dev:
  stage: deploy
  image: alpine/git
  needs:
    - package_backend
    - package_frontend
  script:
    - apk add --no-cache openssh-client
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan -H $DEV_SERVER_IP >> ~/.ssh/known_hosts
    - chmod 600 ~/.ssh/known_hosts
    - ssh $DEV_SERVER_USER@$DEV_SERVER_IP "
        docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY &&
        docker pull $DOCKER_IMAGE_BACKEND &&
        docker pull $DOCKER_IMAGE_FRONTEND &&
        docker stop my-spring-app || true &&
        docker rm my-spring-app || true &&
        docker run -d --name my-spring-app -p 8080:8080 $DOCKER_IMAGE_BACKEND &&
        docker stop my-angular-app || true &&
        docker rm my-angular-app || true &&
        docker run -d --name my-angular-app -p 80:80 $DOCKER_IMAGE_FRONTEND
      "
  environment:
    name: development
    url: http://$DEV_SERVER_IP
  only:
    - main # ou une branche de développement

Ce script illustre un déploiement basique. En production, des solutions d'orchestration comme Docker Compose ou Kubernetes seraient privilégiées pour gérer la persistance, le scaling et la haute disponibilité. L'intégration de ces outils dans le pipeline GitLab CI/CD permet de gérer des déploiements complexes avec une grande flexibilité.

Point de vue : développeur full stack à Dakar

Pour un développeur full stack à Dakar travaillant sur des systèmes comme des applications de gestion des risques ou des plateformes de gestion hospitalière, la maîtrise de GitLab CI/CD et Docker représente un avantage concurrentiel réel sur le marché technologique africain, en pleine expansion. L'automatisation du déploiement permet de concentrer les efforts sur l'innovation et la résolution de problèmes métier, plutôt que sur des tâches répétitives et sujettes aux erreurs. Cela est crucial pour Laty Gueye Samba, Développeur Full Stack Dakar Sénégal, qui vise l'excellence dans la livraison de projets.

Conclusion

Le déploiement continu d'applications Full Stack (Spring Boot + Angular) avec GitLab CI/CD et Docker est plus qu'une simple commodité ; c'est une nécessité pour les équipes de développement modernes. Il assure une intégration rapide, des tests approfondis et des déploiements fiables, contribuant directement à la qualité du logiciel et à la satisfaction des utilisateurs.

L'expertise en technologies comme GitLab CI/CD, Docker, Java Spring Boot et Angular est fondamentale pour tout Développeur Full Stack souhaitant exceller. Laty Gueye Samba, Développeur Full Stack à Dakar, s'appuie sur ces outils pour architecturer et livrer des solutions robustes et évolutives, en adéquation avec les exigences des projets contemporains.

Pour approfondir vos connaissances, voici quelques 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