Introduction
Après une expérience de plus de huit années au sein de SQLI, j’ai eu l’opportunité de participer à de nombreux projets et d’apporter ma contribution à plus de la moitié d’entre eux. Au fil du temps, j’ai mémorisé les procédures, les actions et les modifications nécessaires à chaque nouveau projet, ainsi que les étapes incontournables lors de l’installation sur nos serveurs internes. Sans parler de la configuration des pipelines, qui est systématiquement copiée d’un projet à l’autre, sans n’être jamais révisée, faute de temps. Huit ans, c’est une longue période.
Un jour, j’ai atteint un point de saturation. Il était tout simplement incroyable que notre entreprise, spécialisée dans le développement de solutions d’automatisation pour nos clients, ne l’applique pas à elle-même ! Je suis bien conscient que les cordonniers sont souvent les plus mal chaussés, mais à un certain moment, il ne doit plus rester de semelles du tout ! Nous perdions des journées entières à mettre en place manuellement chaque projet. Des journées qui pourraient être plus rentables si elles étaient consacrées à notre véritable valeur ajoutée : le développement.
La création répétitive de projets selon les mêmes modèles et procédures présente certains avantages pour initier les nouveaux arrivants aux serveurs, à la sécurité, aux procédures et aux outils que nous utilisons. Cependant, il devient nécessaire d’aller de l’avant à un certain stade.
C’est ainsi que j’ai entrepris de résoudre ce problème à sa source en étendant cette approche à tout ce qui n’avait pas besoin d’être réalisé manuellement. J’ai développé une plateforme interne qui automatise toutes les tâches qui peuvent l’être.
L’idée sous-jacente est la suivante : chaque projet comprend une série d’étapes bien définies :
- Initialisation
- Configuration du serveur
- Paramétrage des pipelines
- Développement
- Tests
- Livraison
- Monitoring
- Clôture
Parmi ces huit points, la seule étape où l’intervention humaine est essentielle est la phase de développement. Toutes les autres étapes présentent peu d’intérêt à être réalisées manuellement par une personne et peuvent même entraîner des risques d’erreurs. Il est donc vivement recommandé de les automatiser.
Je vais regrouper ces étapes en 3 grandes catégories :
L’avant-projet
La première catégorie regroupe les étapes préliminaires, telles que l’initialisation du code et de son dépôt Git, l’installation et la configuration du serveur interne dédié au projet, ainsi que la mise en place des pipelines pour automatiser les tests et les déploiements sur le serveur. Ces étapes sont systématiques d’un projet à l’autre et n’apportent aucune valeur ajoutée lorsqu’elles sont réalisées manuellement. En revanche, une machine peut les effectuer de manière rapide et précise, sans omettre de tâches ou de détails importants.
L’outil interne développé permet ainsi de sélectionner la technologie du projet à initialiser (Symfony, Drupal, etc.) via une interface conviviale. Il se charge ensuite d’installer et de configurer les packages requis dans les versions appropriées sur un serveur vierge (PHP, Apache, etc.). Un premier commit est automatiquement créé dans le dépôt du projet, avec la technologie choisie déjà initialisée et les modifications nécessaires à notre infrastructure déjà en place. Les pipelines préconfigurés sont également intégrés au projet, couvrant la majorité des besoins. Des personnalisations peuvent être apportées si nécessaire.
Cette phase de démarrage de projet, qui prenait auparavant plusieurs jours, peut désormais être réduite à quelques heures, permettant de se concentrer sur des ajustements spécifiques au projet, si besoin est.
Le projet
La deuxième phase est à la fois celle où l’intervention humaine est indispensable et celle où les développeurs excellent dans leur rôle. Il s’agit de la partie active du projet, où les développeurs progressent à travers les différents sprints et effectuent des commits réguliers. C’est durant cette phase que le projet est construit de A à Z.
Le développement ne peut pas être automatisé à ce stade, car c’est là que nos développeurs exceptionnels peuvent exprimer tout leur talent.
En fonction du niveau de rigueur requis pour le projet, des tests unitaires, des tests fonctionnels, des tests de bout en bout, des tests visuels, des audits de qualité du code, ou une combinaison de plusieurs méthodes peuvent être mis en place.
L’outil interne développé n’apporte pas de contributions significatives durant cette phase. Il se connecte simplement aux résultats des tests exécutés automatiquement via les pipelines et génère des rapports. Ces rapports peuvent être utiles pour les chefs de projet ou les clients.
L’après-projet
Une fois le projet terminé et livré, la phase de maintenance débute. Il s’agit alors de surveiller en permanence la disponibilité du site, les dépendances, les vulnérabilités et de s’assurer que les nouvelles évolutions demandées ultérieurement ne causent pas de régressions.
C’est à ce stade que l’outil trouve toute son utilité, car il permet une surveillance continue des dépendances (vendors, node_modules, pom.xml, etc.) afin de détecter toute vulnérabilité potentielle et d’émettre des alertes en conséquence.
Il reste encore deux fonctionnalités à ajouter pour parfaire cet outil :
- La surveillance de la disponibilité et du temps de chargement une fois le site en ligne.
- L’archivage automatique des projets une fois qu’ils sont clôturés.
Une fois ces deux fonctionnalités intégrées, l’outil sera parfait pour accompagner les projets tout au long de leur cycle de vie, de l’initialisation à la clôture, en passant par le développement, la maintenance et la surveillance. Il permettra de gagner du temps à chaque étape, en permettant aux employés de se concentrer sur des aspects à réelle valeur ajoutée, tandis que la machine s’occupera de toutes les tâches automatisables. En outre, il facilitera considérablement la reprise de projets développés par des agences concurrentes, en permettant d’effectuer des audits de qualité et de sécurité plus rapidement et efficacement sur le code récupéré.