L'importance De Disposer Des Bons Outils Au Démarrage D'un Projet (1/2)
Dans l’article précédent, j’expliquais comment faire en sorte de s’en sortir pour mettre à niveau un projet laissé à l’abandon avec une importante dette technique. Ces projets ont aussi souvent un autre point commun. Ils ont une forge de développement déficiente ou inexistante.
Qu’est-ce qu’une forge de dev ?
Une forge de dev est l’ensemble des outils avec lesquels le développeur interagit de la phase de conception jusqu’à la livraison du logiciel. Cette forge est là pour assister le développeur en automatisant le maximum de tâches et apporte en même temps des garde-fou afin de parer à d’inévitables erreurs humaines tout au long du cycle de développement.
Une bonne forge est donc un gage de productivité et de sécurité dans une équipe. Il s’agit cependant d’un point souvent négliger en début de projet. Les raisons peuvent être multiples, de la difficulté de mise en place et de maintenance, à l’absence d’intérêt lorsque le projet est encore petit ou encore l’envie de démarrer l’implémentation du code le plus vite possible.
De l’importance d’avoir de bonnes fondations.
Tout comme une maison, un logiciel a besoin de base solide pour démarrer. Il sera ainsi bien plus difficile et couteux de revenir sur un existant. Refaire les fondations une fois que les mûrs sont montés est beaucoup plus compliqué. Il est maintenant couramment admis que réfléchir à une bonne architecture logicielle avant de commencer l’implémentation est bénéfique pour le projet. Cependant, la forge de dev est souvent négligée alors qu’elle sera la plateforme qui servira tout au long de la durée de vie du projet.
Fonction d’une forge de dev.
La forge de dev doit offrir plusieurs fonctionnalités.
- Dépôt de code source
- Documentation
- Dépôt de binaire
- Gestion des secrets
- Partage de fichier
- Visioconférence
- Agenda
- Tchat
- Qualité de code
- Gestion de projet
- CI/CD
- Sécurité
- Gestion des utilisateurs et des droits.
Dépôt de code source
C’est le centre de votre forge. Pas de code source, pas de logiciel. Le logiciel de gestion de version du code source le plus utilisé et git. Votre dépôt de code source devra être capable de gérer une demande de modification de code, de relecture et d’approbation des demandes.
Documentation
Une documentation est absolument vitale pour un projet. Cela peut prendre plusieurs formes. Un simple wiki, un site web autogénéré. Comment produire une bonne documentation fait débat et dépendra de chaque équipe et projet. J’ai personnellement une préférence pour une documentation à même le code ou via des fichiers markdown type README.md ou CHANGELOG.md.
Il existe de nombreux outils de génération de documentation pour les API d’un projet ou la documentation du code.
Dépôt de binaire.
Une fois le code compilé et testé, les binaires doivent être stockés dans un dépôt afin de permettre leur déploiement sur l’ensemble des environnements du projet. Il est important de garder les différentes versions du projet pour pouvoir rapidement redéployer une version précédente en cas de problème. Ce dépôt de binaire doit être capable de gérer l’ensemble des formats attendus par le projet. Pour java, cela sera un dépôt maven, pour JavaScript npm, etc. Ce dépôt devra pouvoir également faire office de proxy avec les dépôts officiels. Cela permet de s’assurer que les binaires externes au projet sont toujours accessibles et de garantir des vitesses de téléchargement correct.
Gestion des secrets
Sur tous les projets, il arrivera un moment où des secrets devront être partagés entre les divers membres de l’équipe ou aves les outils de la forge de dev. Afin de permettre cela en toute sécurité et facilement, un gestionnaire de secret est indispensable. Ce dernier servira de référentiel commun et doit fournir une API permettant aux outils d’y accéder sans intervention humaine et de manière sécurisée.
Partage de fichier
Il est courant de devoir s’envoyer des fichiers entre personnes de la même équipe. Ces fichiers peuvent n’être qu’adressés qu’à certaines personnes et pas d’autre. Ils peuvent également être volumineux et devoir être conservé. Pour toutes ces raisons un logiciel de gestion documentaire et de partage de fichier est indispensable au projet. Cela permettra à chaque membre de l’équipe, ancien comme nouveaux arrivants d’accéder à l’ensemble des fichiers existants.
Visioconférence
Avec le développement du télétravail, il est de plus en plus fréquent de devoir tenir des réunions via des visioconférences. Avoir un logiciel sécurisé et performant est obligatoire. Pouvoir simplement programmer des réunions est un plus non négligeable.
Agenda
En parlant de programmation d’événements, disposer d’un calendrier d’équipe partagée et accessible depuis des standards tel que CalDav permettra à toute l’équipe s’organiser efficacement.
Tchat
La communication ne se fait pas seulement via courriel ou visioconférence. Dans une équipe de dev, une messagerie instantanée permet une communication synchrone ou asynchrone très efficace. Un système de bot permettant d’afficher automatiquement des alertes ou l’état du projet est également un gros plus sur ce genre de produit.
Qualité de code
Il est fondamental d’avoir les outils permettant de surveiller la qualité de code du projet. Un projet de bonne qualité est un projet maintenable, respectant les standards, testé et à jour. Les mesures doivent être aisément accessibles et compréhensibles. Un gros plus est d’avoir l’analyse en temps réel dans l’IDE.
Gestion de projet.
Avant toute chose, il faut choisir une méthode de gestion de projet correspondant à l’équipe et au projet. La plupart des outils supportent la gestion type “Kanban”. “Scrum” se généralise également beaucoup. Cela se traduit par un tableau avec différentes colonnes, représentant les états des tickets en cours sur le projet. Les tickets peuvent être regroupés en “milestones” ou “epic”.
CI/CD
Il s’agit du cœur névralgique de votre forge de dev. Elle est intimement liée au dépôt de code source et se déclenche souvent lors d’une modification de ce dernier. Une bonne CI/CD est fondamentale, car cela permet des gains de temps énormes. A contrario une CI/CD mal maîtrisée, sera source de problème et de pertes de temps récurrents.
Sécurité
Il est également important d’avoir des analyses de sécurité s’effectuant régulièrement afin de détecter et corriger au plus vite les failles de sécurité. Ces analyses (souvent longues) sont généralement effectuées automatiquement par la CI pendant la nuit.
Gestion des utilisateurs et des droits.
Afin d’assurer une expérience utilisateur (pour les dev) optimale et de gérer finement les droits d’accès de chacun, il est fortement recommandé de disposer d’une solution d’identification et d’autorisation centralisée auquel seront connectés l’ensemble des autres logiciels de la forge. Les protocoles SAML et OIDC permettent d’attendre ce but en assurant une session unique sur l’ensemble des logiciels ainsi que la propagation automatique des permissions de chacun.
Conclusion
Nous avons vu l’ensemble des outils qui, à mon sens, devrait constituer une forge de dev avant même de commencer à écrire une ligne de code. La mise en place de cette forge demande du temps initial et une maintenance pour suivre l’évolution du projet, mais cela est sans commune mesure avec le temps nécessaire pour la mettre en place une fois le projet bien avancé. Cet article étant déjà bien long, je détaillerai, dans une seconde partie, une liste de logiciels opensource et “auto-hébergeable” pour chaque catégorie.