12. Devops ‐ CI CD ‐ Outils - Karitchi/infolab GitHub Wiki
Nous avons mis en place un système simple et efficace pour l’automatisation du déploiement et des tests. Voici les étapes principales :
1. Automatisation du déploiement
GitHub Actions
: À chaque commit sur la branchemain
, des workflows construisent automatiquement les images Docker pour le backend et la base de données, puis les publient sur GitHub Container Registry. Voici le workflow :
name: Build and Push Docker Images to GitHub Container Registry
on:
push:
branches:
- main
workflow_dispatch:
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Check out the code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GHCR_TOKEN }}
- name: Build and push Node image
uses: docker/build-push-action@v4
with:
context: .
file: Dockerfile.node
push: true
tags: ghcr.io/karitchi/infolab/node:latest
- name: Build and push Postgres image
uses: docker/build-push-action@v4
with:
context: .
file: Dockerfile.postgres
push: true
tags: ghcr.io/karitchi/infolab/postgres:latest
- name: Verify the images were pushed
run: |
echo "Node image has been pushed to GitHub Container Registry: ghcr.io/${{ github.repository }}/node:latest"
echo "Postgres image has been pushed to GitHub Container Registry: ghcr.io/${{ github.repository }}/postgres:latest"
Watchtower
: Un conteneur sur notre serveur AWS EC2 surveille ces images. Dès qu’une nouvelle version est disponible, elle est automatiquement déployée, remplaçant l’ancienne. La configuration de notre serveur est illustrée par ce fichier docker-compose :
name: infolab
services:
watchtower:
restart: unless-stopped
environment:
TZ: Europe/Brussels
WATCHTOWER_CLEANUP: true
WATCHTOWER_NO_STARTUP_MESSAGE: true
WATCHTOWER_POLL_INTERVAL: 5
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- watchtower
nodejs:
image: ghcr.io/karitchi/infolab/node:latest
ports:
- "3000:3000"
restart: unless-stopped
depends_on:
- postgres
networks:
- infolab
postgres:
image: ghcr.io/karitchi/infolab/postgres:latest
ports:
- "5432:5432"
volumes:
- /docker/container/postgres/data:/var/lib/postgresql/data
restart: unless-stopped
networks:
- infolab
networks:
infolab:
watchtower:
2. Outils utilisés
Docker
: Assure la conteneurisation des services pour un déploiement rapide et fiable.GitHub Actions
: Automatise les étapes de construction et de publication des images Docker.Watchtower
: Détecte et déploie automatiquement les nouvelles versions des conteneurs.
3. Avantages du setup
- Simplicité : Réduit les risques d’erreurs et nécessite peu de maintenance.
- Flexibilité : Convient parfaitement à un projet tolérant de légères interruptions de service.
Alternative et raison de son non-choix
Nous avons envisagé l’utilisation de Kubernetes
, qui offre une gestion avancée des conteneurs et une haute disponibilité. Cependant, cette solution est complexe et surdimensionnée pour ce projet, qui n’exige ni échelle massive ni disponibilité continue.