Contexte
Des modules de traitement fonctionnels, pas d’intégration entre eux
Le client est venu vers nous via le bouche-à-oreille, en cherchant un partenaire expérimenté en industrialisation de systèmes complexes.
Les modules de traitements, destinés à une détection de défaut lors de la fabrication de pièces métalliques aéronautiques avec une imprimante 3D industrielle, sont existants et fonctionnels, mais le système n’a jamais été mis en production hors de laboratoire.
De plus, il n’existe pas de chaîne d’orchestration permettant de récupérer les sorties d’un module et les passer au suivant, tout est manuel et les interfaces ne sont pas clairement définies.
Toutes les bonnes pratiques et actions nécessaires à un déploiement fiable et contrôlé sont à définir et appliquer, et de manière générale les bonnes pratiques de développement doivent être mises en œuvre.
Solutions
Création chaîne d’orchestration
Le projet a consisté à structurer des modules Python existants au sein d’une chaîne de traitement et orchestrant les traitements de manière asynchrones et robuste via Celery et dont le pilotage est exposé au travers d’une API REST.
Le projet a commencé par l’uniformisation et à la mise à jour des dépendances, puis la conteneurisation des modules via Podman.
Nous avons proposé Django pour sa fonctionnalité ORM, couplée à Django REST Framework pour la partie API.
Des journaux d’exécution ont été ajoutés pour tracer les différentes étapes d’exécution des pipelines.
Mise en place de tests et CI/CD
Une stratégie de tests complète a été mise en place, combinant tests unitaires et tests d’intégration afin de fournir au client une base saine
et les tests de non-regression qui l’aidera à avancer sereinement.
L’ensemble de la chaîne CI/CD permet le packaging, le versionnement et la publication des composants dans un registry de containers GitLab, garantissant une traçabilité claire des livraisons.
Industrialisation solution
La solution a été industrialisée pour un usage en production, avec la mise en place de mécanismes de sécurisation (HTTPS, authentification JWT) et de protection logicielle via licence/dongle USB.
Le déploiement repose sur une architecture conteneurisée (Podman / docker-compose) connecté à une base PostgreSQL (et SQLite pour le développement).
Une traçabilité auditable des défauts détectés lors des jobs d’impression est assurée par les journaux, avec les versions exactes des composants logiciels utilisés.
Passation et documentation
La passation a été accompagnée par la rédaction d’une documentation d’architecture détaillée et par l’auto-génération par la CI de la documentation des API via Swagger. Nous avons entre autres documenté la manière d’ajouter de futurs modules dans la chaîne de traitement.
Des guides utilisateurs et manuels d’utilisation ont également été produits afin d’assurer l’autonomie des équipes et la pérennité de la solution.
Résultats
Un produit prêt à être déployé, un futur assuré
Le produit étant désormais en capacité d’être déployé dans des situations concrètes hors laboratoire, il est remis entre les mains du client.
Celui-ci est en mesure de continuer les déploiements, et de s’appuyer sur une chaîne CI/CD fiable.
La dette technique est maîtrisée, et le projet peut continuer.