Aller au contenu

🚀 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 :

  1. 🏗️ Étape de Construction
  2. 📚 Copie des Dépendances
  3. 🖼️ Image d'Exécution Finale
  4. ⚙️ Configuration des Variables d'Environnement et des Permissions
  5. 🚀 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

  1. Arguments (ARG):
  2. Définit des variables pour les versions d'images, l'environnement de build, et les chemins importants.
  3. Permet une flexibilité dans la configuration du build.

  4. Étape de construction (builder):

  5. Utilise une image Python spécifique pour la construction.
  6. Crée un environnement virtuel et installe les dépendances.
  7. Installe Pillow séparément (potentiellement pour le traitement d'images).

  8. Étape d'exécution (run):

  9. Utilise une image Python plus légère pour l'exécution.
  10. Copie l'environnement virtuel et le code de l'application.
  11. Configure les permissions et l'utilisateur pour une meilleure sécurité.

  12. Sécurité:

  13. Utilise un utilisateur non-root (OPS_USER) pour l'exécution.
  14. Applique les bonnes pratiques de propriété des fichiers.

  15. Configuration Flask:

  16. Définit FLASK_APP et expose le port 5000.
  17. Utilise la commande flask run pour 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.yml contient les étapes pour le linting, la construction, et la publication.

🔄 Processus de Lint, Construction et Publication

  1. 🧹 Lint : Vérification du code.
  2. 🏗️ Construction de l'Image : Utilisation du Dockerfile spécifié.
  3. 📤 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 :

  1. 🔑 Configuration Git
  2. 📥 Clonage du Dépôt
  3. 🔄 Modification des Images
  4. 📤 Commit et Push
  5. ✅ 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

alt text


📌 Notes supplémentaires - Assurez-vous de maintenir à jour la documentation en parallèle avec les modifications du code. - Effectuez des revues régulières du pipeline pour identifier les opportunités d'optimisation. - Considérez l'ajout de tests automatisés pour la configuration du pipeline elle-même.