🚀 Implémentation du Template de Pipeline CI/CD pour une Application Flask¶
Prérequis de déploiement CI/CD GitLab¶
| # | Prérequis | 📘 Template globale | 📙 Projet CD | 📗 Projet CI | Définition |
|---|---|---|---|---|---|
| 1 | Accès GitLab | ✅ | ✅ | ✅ | Compte utilisateur avec permissions adéquates |
| 2 | Projet GitLab | ✅ | ✅ | ✅ | Dépôt Git initialisé pour chaque projet |
| 3 | Serveur de déploiement | - | ✅ | - | Serveur configuré pour les déploiements |
| 4 | Runner GitLab | ✅ | ✅ | ✅ | Exécuteur de jobs CI/CD |
| 5 | Fichier .gitlab-ci.yml | ✅ | ✅ | ✅ | Configuration du pipeline CI/CD |
| 6 | Secrets et variables CI/CD | ✅ | ✅ | ✅ | Informations sensibles et variables d'environnement |
⚠️ Note importante : Assurez-vous de vérifier chaque élément pour garantir un déploiement fluide et sécurisé de vos applications avec GitLab CI/CD.
📌 Légende : - ✅ : Élément requis et à configurer - - : Élément non applicable ou optionnel - # : Numéro de l'étape dans le processus de configuration
🔄 Intégration Continue (CI)¶
📦 Configuration du Dockerfile¶
Le Dockerfile est structuré en plusieurs étapes clés :
- 🏗️ Étape de Construction
- 📚 Copie des Dépendances
- 🖼️ Image d'Exécution Finale
- ⚙️ Configuration des Variables d'Environnement et des Permissions
- 🚀 Définition du Point d'Entrée
💡 Astuce : Assurez-vous que votre Dockerfile suit les meilleures pratiques pour optimiser la taille et la sécurité de l'image.
Voir le code
ARG IMAGE_BASE_URL="releases.registry.docker.kaisens.fr"
ARG PYTHON_IMAGE_VERSION="3.10-4"
ARG PYTHON_BUILD_IMAGE_VERSION="${PYTHON_IMAGE_VERSION}-3"
ARG BUILD_ENVIRONMENT="prod"
ARG TMP_SETUP_DIRPATH="/tmp/src"
ARG VENV_DIRPATH="/opt/ticketing-synchronizer/venv"
ARG APP_HOME="/app"
FROM ${IMAGE_BASE_URL}/kaisensdata/devops/docker-images/python-build:${PYTHON_BUILD_IMAGE_VERSION} as builder
ARG VENV_DIRPATH
ARG TMP_SETUP_DIRPATH
ARG BUILD_ENVIRONMENT
USER root
RUN virtualenv "${VENV_DIRPATH}"
COPY requirements/ "${TMP_SETUP_DIRPATH}/requirements"
RUN "${VENV_DIRPATH}"/bin/pip install --no-cache-dir -r "${TMP_SETUP_DIRPATH}/requirements/${BUILD_ENVIRONMENT}" && \
"${VENV_DIRPATH}"/bin/pip install Pillow
USER "${OPS_USER}"
FROM ${IMAGE_BASE_URL}/kaisensdata/devops/docker-images/python:${PYTHON_IMAGE_VERSION} as run
ARG APP_HOME
ARG VENV_DIRPATH
ARG BUILD_ENVIRONMENT
USER root
COPY --from=builder --chown="${OPS_USER}":"${OPS_USER}" "${VENV_DIRPATH}" "${VENV_DIRPATH}"
ENV PATH="${VENV_DIRPATH}"/bin:"${PATH}"
ENV FLASK_APP=app.py
COPY --chown="${OPS_USER}":"${OPS_USER}" . "${APP_HOME}"
RUN chown "${OPS_USER}":"${OPS_USER}" "${APP_HOME}"
USER "${OPS_USER}"
WORKDIR "${APP_HOME}"
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]
🔍 Explication détaillée du Dockerfile¶
- Arguments (ARG):
- Définit des variables pour les versions d'images, l'environnement de build, et les chemins importants.
-
Permet une flexibilité dans la configuration du build.
-
Étape de construction (builder):
- Utilise une image Python spécifique pour la construction.
- Crée un environnement virtuel et installe les dépendances.
-
Installe Pillow séparément (potentiellement pour le traitement d'images).
-
Étape d'exécution (run):
- Utilise une image Python plus légère pour l'exécution.
- Copie l'environnement virtuel et le code de l'application.
-
Configure les permissions et l'utilisateur pour une meilleure sécurité.
-
Sécurité:
- Utilise un utilisateur non-root (
OPS_USER) pour l'exécution. -
Applique les bonnes pratiques de propriété des fichiers.
-
Configuration Flask:
- Définit
FLASK_APPet expose le port 5000. - Utilise la commande
flask runpour démarrer l'application.
💡 Astuce: Ce Dockerfile utilise des images de base personnalisées, assurez-vous qu'elles sont accessibles dans votre registry Docker privé.
⚠️ Attention: L'utilisation d'un environnement virtuel dans un conteneur peut sembler redondante, mais cela peut aider à isoler les dépendances de l'application et faciliter les mises à jour futures.
🧪 Test du Processus CI avec GitLab CI/CD¶
Définition du Pipeline CI/CD¶
Le pipeline est défini dans le fichier .gitlab-ci.yml :
include:
- project: kaisensdata/devops/cicd-templates
ref: master
file:
- templates/django-app.yml
variables:
SVC_NAMES: ticket-sync
DEPLOY_REPO_PATH: kaisensdata/pocs/run-services/deployments/ticketing_synchronizer
🔍 Explication de la Configuration GitLab CI/CD¶
- 📥 Directive Include : Importe des templates CI/CD prédéfinis.
- 🔢 Variables : Définit des variables spécifiques à l'environnement.
- 🔗 Référence de Template : Le template
django-app.ymlcontient les étapes pour le linting, la construction, et la publication.
🔄 Processus de Lint, Construction et Publication¶
- 🧹 Lint : Vérification du code.
- 🏗️ Construction de l'Image : Utilisation du Dockerfile spécifié.
- 📤 Publication : Publication de l'image dans un dépôt Nexus.
🚀 Déploiement Continu (CD)¶
⚙️ Configuration du Pipeline de Déploiement¶
Le fichier .gitlab-ci.yml pour le déploiement :
include:
- project: kaisensdata/devops/cicd-templates
ref: master
file:
- templates/cd-deploy-app.yml
📄 Fichier cd-deploy-app.yml¶
Ce fichier inclut plusieurs configurations et définit les stages de déploiement.
🛠️ Configuration du Fichier deploy.yml¶
Le fichier deploy.yml contient les détails spécifiques pour le déploiement :
| Élément | Description |
|---|---|
| 🖼️ image | Spécifie l'image Docker |
| 🔌 ports | Expose les ports nécessaires |
| 🔐 env-file | Définit les variables d'environnement |
| 💾 volumes | Configure le mappage des volumes |
| 🚀 deploy | Configure le mode de déploiement |
| 🌐 networks | Spécifie les réseaux utilisés |
🔗 Intégration CI/CD¶
🔄 Mise à Jour du Fichier .gitlab-ci.yml¶
include:
- project: kaisensdata/devops/cicd-templates
ref: master
file:
- templates/django-app.yml
- addons/deploy-app.yml
# Contenu du fichier deploy-app.yml
include:
- local: jobs/deploy/trigger-deploy.yml
deploy-app-testing:
stage: deploy
extends: .trigger-deploy
variables:
DEPLOY_ENV: testing
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: manual
- when: never
🔧 Configuration du Fichier trigger-deploy.yml¶
Ce fichier automatise le processus de déploiement en suivant ces étapes :
- 🔑 Configuration Git
- 📥 Clonage du Dépôt
- 🔄 Modification des Images
- 📤 Commit et Push
- ✅ Conditions d'Exécution
⚠️ Attention : Assurez-vous que les permissions Git sont correctement configurées pour permettre les opérations automatisées.
📊 Schéma d'Intégration¶
