DevOps 🏋️‍♂️

Toutes les étapes que nous avons réalisés pour faire du continuous delivery

Docker 🐳

Docker est une solution de conteneurisation LXC permettant de créer des conteneurs. ces conteneurs contiennent l'application ainsi que toutes les librairies systèmes. les avantages de docker sont :

  • Compatibilité : les conteneurs sont cloisonnés et contiennent leur propre configuration, une fois docker installée l'application l'application fonctionnera sans problème.

  • Immutabilité : l'image reste intacte et se réinitialise à chaque démarrage.

  • Scalabilité : On peut lancer de multiples instances de notre application sur de multiples serveurs sans problème de compatibilité.

  • Rapidité : Les conteneurs se lancent en moins d'une seconde car ils partagent tous le même noyau du PC hôte une image Linux Alpine fait 5 MO.

Docker-compose 🏆

# docker-compose.yml script de lancement de notre application
version: '3'

services:
    webapp: 
        build: .  # construit notre application à partir du Dockerfile 
        image: react-app # nom de notre image aprés construction 
        ports: # Mapping du port 80 local  vers le port 80 du conteneur
            - "80:80"

Nginx configuration ⛳️

Dans cette partie il s'agit d'un simple fichier de configuration nginx qu'on va ajouter dans notre image permettant de servir notre application au port 80.

nginx.conf
server {
  listen 80;
  location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }
}

Docker file 🚤

Un Dockerfile est un fichier indiquant toutes les étapes permettant la construction d'une image de notre application, une fois cette image créée on peut lancer une instance de cette image nommée conteneur.

# On recupère une image de NodeJS vierge à partir du Dockerhub

FROM node:alpine as build 

# On specifie le dossier du conteneur sur lequel on compte travailler (mkdir + cd)
WORKDIR /app

# On copie le fichier de dépendance npm de notre ordinateur vers le conteneur 
COPY package*.json /app/

# On installe les dépendances
RUN npm install ---loglevel verbose && \ 
npm install react-scripts@3.4.1 -g --loglevel verbose

# On copie les fichiers sources vers le conteneurs
COPY . .

# On ajoute Le dossier .bin dans le PATH afin de permettre à react-script de build
# l'application

ENV PATH /app/node_modules/.bin:$PATH
RUN npm run build  ---loglevel verbose

# NGINX

# On récupère une image vierge de nginx basé sur l'OS Alpine
FROM nginx:alpine
# On copie l'application de production vers notre nouveau conteneurs
COPY --from=build /app/build /usr/share/nginx/html

# On remplace le fichier de configuration par defaut par le notre
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d

# On permet l'accées au port 80 de notre conteneur
EXPOSE 80

# A l'execution nginx sera lancé 
CMD ["nginx","-g","daemon off;"]

Jenkins 👨

Jenkins est une solution Open source écrite en java permettant l'intégration et le déploiement continue.

Les possibilités de Jenkins sont infini, cela va du simple test d'intégration au déploiement sur une grande infrastructure grâce à sa richesse de plugin.

Pour notre projet nous avons coder une simple pipeline pour que Jenkins récupère notre projet à jour, le construire et le déployer automatiquement sur notre serveur.

Pipeline configuration 🎯

On définit 3 étapes :

  • Pull : Une de mise a jour qui consiste a récupérer la dernière version de notre application sur Github à la branche Master.

  • Build : La construction de notre application à partir du docker-compose et Dockerfile

  • Deploy : Déploiement l'application -> On éteint et on supprime notre ancienne version d'application sur docker puis on redémarre avec la nouvelle version récemment construite.

node {
    stage('pull'){
        git 'https://github.com/LasCC/HomeDelivery.git'
    }
    stage('build'){
        sh '/usr/local/bin/docker-compose build'
    }
    stage('deploy'){
        sh '/usr/local/bin/docker-compose down && docker system prune -f && /usr/local/bin/docker-compose up -d'
    }
}

Dernière mise à jour

Cet article vous a-t-il été utile ?