Étendre les fonctionnalités d'Odoo avec GitLab CI/CD : Automatisation et déploiement continu pour une gestion efficace

Découvrez comment utiliser GitLab CI/CD pour étendre les fonctionnalités d'Odoo, la plateforme de gestion d'entreprise open source, en automatisant les tâches de développement et en assurant un déploiement continu sans effort.

En quelques mots...

Odoo, une solution de gestion d'entreprise open source populaire, offre un large éventail de fonctionnalités pour répondre aux besoins spécifiques des entreprises. Cependant, il est parfois nécessaire d'étendre ses fonctionnalités pour s'adapter aux processus métier uniques de chaque organisation. Dans cet article, nous explorerons comment utiliser GitLab CI/CD pour améliorer le développement d'Odoo en automatisant les tâches, en facilitant la collaboration et en assurant un déploiement continu sans heurts.


Qu'est-ce que GitLab CI/CD et comment ça fonctionne ?

GitLab CI/CD est un outil d'intégration continue (CI) et de déploiement continu (CD) qui s'intègre directement avec GitLab, une plateforme de gestion de code source. Il permet d'automatiser les tâches liées au développement, aux tests et au déploiement d'applications.

Le CI/CD est une pratique de développement qui consiste à automatiser les différentes étapes du cycle de vie d'une application, de la validation du code à sa mise en production. Cela permet d'accélérer le processus de développement, d'améliorer la qualité du code et de faciliter le déploiement fréquent et prévisible des applications.

GitLab CI/CD fonctionne en utilisant un fichier de configuration .gitlab-ci.yml présent dans le dépôt de code source du projet. Ce fichier définit les différentes étapes (jobs) à exécuter lorsqu'un événement se produit, tel qu'un commit ou une fusion de code. Chaque étape peut inclure des scripts, des commandes ou des actions spécifiques à exécuter.

Lorsqu'un événement est déclenché, GitLab CI/CD crée un environnement d'exécution isolé (runner) pour chaque étape du pipeline. Les runners peuvent être exécutés sur des machines virtuelles, des conteneurs Docker ou des instances physiques.

GitLab CI/CD prend en charge différents types de runners, tels que les runners partagés (shared runners) gérés par GitLab, les runners spécifiques à un projet ou les runners autoscalables sur des plates-formes cloud. Ces runners exécutent les jobs définis dans le fichier .gitlab-ci.yml et renvoient les résultats à GitLab.

GitLab CI/CD fournit également des fonctionnalités pour le suivi et la visualisation des pipelines, la gestion des variables d'environnement, l'intégration avec des outils de test et de déploiement, la gestion des branches et des tags, etc.


Configuration de GitLab CI/CD pour Odoo

La configuration initiale de GitLab CI/CD pour Odoo implique plusieurs étapes clés pour assurer son bon fonctionnement. Voici les étapes principales à suivre :

Créer un fichier .gitlab-ci.yml à la racine de votre projet Odoo : Ce fichier est essentiel pour définir les étapes et les actions à exécuter lors du processus CI/CD. Vous pouvez le créer manuellement ou le générer automatiquement à partir d'un modèle.

Définir les runners GitLab : Les runners GitLab sont les agents qui exécutent les jobs CI/CD. Vous pouvez utiliser des runners partagés ou configurer vos propres runners. Assurez-vous d'avoir au moins un runner disponible pour exécuter les tâches spécifiques à Odoo.

Configurer les variables d'environnement : Les variables d'environnement sont des paramètres que vous pouvez définir dans les jobs CI/CD pour stocker des informations sensibles ou spécifiques à votre projet Odoo, tels que les identifiants de connexion à la base de données, les clés API, etc. Vous pouvez les définir dans les paramètres du projet GitLab.

Définir les stages et les jobs : Dans le fichier .gitlab-ci.yml, vous devez définir les différentes étapes (stages) et les jobs à exécuter à chaque étape. Par exemple, vous pouvez avoir des étapes telles que "build", "test" et "deploy", et définir des jobs spécifiques pour chacune de ces étapes.

Gérer les dépendances : Si votre projet Odoo dépend de modules externes ou de librairies spécifiques, vous devez vous assurer que ces dépendances sont prises en compte dans votre pipeline CI/CD. Cela peut inclure l'installation des dépendances nécessaires avant l'exécution des tests ou du déploiement.

Définir les règles de déclenchement : Vous pouvez spécifier les conditions pour déclencher l'exécution du pipeline CI/CD. Par exemple, vous pouvez configurer le pipeline pour s'exécuter automatiquement lors de chaque validation de code sur une branche spécifique, ou sur demande manuelle.

Surveiller les résultats et les logs : Une fois que vous avez configuré GitLab CI/CD pour votre projet Odoo, vous pouvez surveiller les résultats, les logs et les rapports générés par chaque exécution du pipeline. Cela vous permet de détecter rapidement les erreurs, les problèmes de performances ou les échecs de tests.


Exemple :

# Structure du projet 

awesome-project

awesome-project/custom_addons

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/i18n

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/security

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/views

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/models

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/wizards

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/__init__.py

awesome-project/custom_addons/ops_crm_enterprise_data_fr_gov/__manifest__.py

.gitignore

.gitlab-ci.yml


# Le fichier .gitlab.yml

# La ligne suivante spécifie que l'exécuteur Docker sera utilisé et que le pipeline s'exécutera dans un conteneur Docker basé sur l'image python:3.8.

image: python:3.8 # cf Python Docker Hub


# Définit les étapes du pipeline CI/CD.

# Chaque étape représente une phase de construction, de test ou de déploiement.

# Elles sont exécutées séquentiellement.

stages:

    - build

    - test

    - deploy


# Définit les variables globales utilisées dans tout le pipeline.

variables:

    POSTGRES_DB: mydatabase

    POSTGRES_USER: myuser

    POSTGRES_PASSWORD: mypassword

    ODOO_MASTER_PASSWORD: my_master_password # cf Odoo Configuration File

    ODOO_VERSION: 14.0 # cf Odoo OCB Version


# Cette section before_script configure l'environnement nécessaire pour exécuter les tâches de construction, de test et de déploiement ultérieures dans le pipeline GitLab CI/CD pour Odoo. Certaines variables comme "SSH_PRIVATE_KEY " et " DEPLOY_SERVER " doivent être créée dans Gitlab cf Gitlab CI/CD Variables


before_script:

  - |

    function install_packages {

      apt-get update -qq

      DEBIAN_FRONTEND=noninteractive apt-get install -qq -y git build-essential python3-dev libssl-dev libffi-dev libldap2-dev libsasl2-dev slapd ldap-utils tox lcov valgrind

    }

    function install_virtualenv {

      # Définition de l'environnement virtuel python cf Virtualenv

      cd OCB

      pip install virtualenv

      virtualenv venv

      source venv/bin/activate

      pip install --upgrade pip

    }

    function install_odoo {

      # Installation des paquets python cf Pip 

      python -V

      source venv/bin/activate && pip install -r requirements.txt

      source venv/bin/activate && python setup.py install

    }

    function create_odoo_file {

      echo "[options]" > odoo.conf

      echo "admin_passwd = $ODOO_MASTER_PASSWORD" >> odoo.conf

      echo "db_host = postgres" >> odoo.conf

      echo "db_port = 5432" >> odoo.conf

      echo "db_user = $POSTGRES_USER" >> odoo.conf

      echo "db_name = $POSTGRES_DB" >> odoo.conf

      echo "db_password = $POSTGRES_PASSWORD" >> odoo.conf

      echo "addons_path = odoo/addons,addons,../custom_addons" >> odoo.conf

    }

    function configure_ssh {

      # Configuration ssh pour la synchronisation des fichiers cf OpenSSH

      DEBIAN_FRONTEND=noninteractive apt-get install -qq -y openssh-client

      echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa

      chmod 600 ~/.ssh/id_rsa

      ssh-keyscan $DEPLOY_SERVER >> ~/.ssh/known_hosts

    }

    

# Définit les jobs à exécuter pour chaque étape du pipeline.

# Chaque job est une tâche spécifique à accomplir.

# Ils peuvent être exécutés en parallèle ou séquentiellement.

# Les scripts spécifiés dans chaque job sont exécutés dans un conteneur Docker.

build:

  stage: build

  script:

    - echo "Construction du projet Odoo $ODOO_VERSION. On tire le repository OCA de github"

    - apt-get install -qq -y git

    - if [ ! -d OCB ] ; then git clone --single-branch --depth=1 --branch $ODOO_VERSION  https://github.com/OCA/OCB.git ; fi


# Le but de la tâche de test est généralement d'exécuter des tests sur votre base de code pour garantir son exactitude et sa qualité.

# Ici nous testons que notre module custom s'installe correctement avec Odoo. Vous pouvez l'adapter pour inclure des tests unitaires par exemple.

test:

  stage: test

  services:

    # Des services peuvent être utilisés pour fournir des dépendances ou des fonctionnalités supplémentaires requises par vos jobs.

    # Ces services seront automatiquement démarrés et liés au conteneur Docker exécutant vos tâches CI/CD. cf Postgres Docker Hub

    - postgres:alpine 

  variables:

    POSTGRES_DB: "my_odoo_db"

    POSTGRES_USER: "odoo_user"

    POSTGRES_PASSWORD: "odoo_password"

    POSTGRES_HOST_AUTH_METHOD: "trust"

    # CI_DEBUG_TRACE: "true"

  script:

    - install_packages

    - install_virtualenv

    - install_odoo

    - create_odoo_file

    - source venv/bin/activate && odoo -c odoo.conf -i ops_crm_enterprise_data_fr_gov --stop-after-init

  dependencies:

    - build


# La tâche de déploiement est généralement utilisée pour déployer votre application ou votre projet dans un environnement spécifique, tel qu'un environnement intermédiaire ou de production.

# Ici nous copions les modules customs vers le serveur et nous redémarrons le conteneur docker avec docker-compose (Odoo est dans un conteneur docker) cf docker compose & rsync

deploy:

  stage: deploy

  script:

    - configure_ssh

    - rsync -avz custom_addons $DEPLOY_USER@$DEPLOY_SERVER:$DEPLOY_PATH

    - ssh $DEPLOY_USER@$DEPLOY_SERVER "cd $DEPLOY_PATH && docker-compose up -d"

  only:

    - master 

Le fichier .gitlab.yml est disponible sur https://awesomegitlab.weopensoft.com

GitLab CI/CD est un outil puissant pour étendre les fonctionnalités d'Odoo et améliorer le processus de développement, de test et de déploiement. En automatisant ces tâches clés, les équipes de développement peuvent se concentrer davantage sur la création de nouvelles fonctionnalités et sur l'amélioration de l'expérience utilisateur. Intégrer GitLab CI/CD dans votre flux de travail Odoo permet une gestion efficace, une collaboration accrue et une livraison continue des nouvelles fonctionnalités.