L'importance De Disposer Des Bons Outils Au Démarrage D'un Projet (2/2)
Deuxième partie de cet article consacré à la forge de dev. Dans le précédent article, nous avons vu l’importance de la forge de dev. Dans cette deuxième partie, nous allons parler des outils permettant de mettre en place une telle forge.
Fonctionnalités
Pour rappel, la forge doit à mon sens offrir les fonctionnalités suivantes :
- 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.
Je ne vais sélectionner que des logiciels gratuits et auto-hébergeable afin que n’importe qui puisse installer sa forge sans avoir besoin de passer par des offres cloud ou SaaS payante.
Dépôts de code source
Vous connaissez sûrement Gitlab, mais ce n’est pas celui-ci que je vais recommander. Un concurrent entièrement libre commence à faire parler de lui et fait son petit bonhomme de chemin. Il s’agit de Gitea
Le but de Gitea est de fournir un clone de GitHub libre et auto-hébergeable. Il est écrit en go. Il est léger et très performant. Il tournera sans problème sur n’importe quelle machine. Si vous connaissez Github, vous ne serez pas perdu.
Documentation
Pour la documentation liée à un projet, Gitea propose un Wiki permettant de répondre des besoins simples. Sinon, vous pouvez également utiliser Nextcloud pour stocker l’ensemble de vos fichiers type word. Avec le plugin OnlyOffice, vous disposez même d’une suite office complète dans votre navigateur.
Pour des besoins plus complexe en wiki, WikiJS permet la création d’un wiki se synchronisant directement avec Git. Cela permet de garder la documentation au plus près du code, tout en la rendant accessible de manière plus ergonomique.
Dépôt de Binaire
Gitea, encore lui, ne fait pas seulement dépôt de code source. Il est aussi capable de stocker les binaires de vos projets. Il supporte les formats suivants :
- Composer
- Conan
- Container
- Generic
- Helm
- Maven
- npm
- NuGet
- Pub
- PyPI
- RubyGems
- Vagrant
Nexus est également une solution possible, mais consomme beaucoup de ressource et ne supporte une connexion SSO que dans la version Enterprise. À n’utiliser que si vous souhaitez disposer de fonctions avancées type proxy.
Gestion des secrets
À ma connaissance, il n’y a pas encore d’alternative complétement libre à Vault, le gestionnaire de mot de passe d’HashiCorp. Ce dernier est néanmoins Open Source et dispose d’une version gratuite. Il est très bien intégré dans nombre d’outils. Il dispose d’une API permettant d’interagir facilement avec lui de manière scriptée.
Partage de fichier.
L’outil de gestion de fichier par excellence est Nextcloud. Disposant d’un important nombre de plugin permettant de le personnaliser à souhait, Nextcloud répond à tous les besoins de stockage et de partage de document de manière sécurisée. Il dispose aussi de client de synchronisation pour l’ensemble des OS bureau et mobile.
VisioConférence.
Nextcloud dispose de son plugin NextcloudTalk, mais celui est assez complexe à mettre en œuvre pour plus de 4 utilisateurs. Je lui préfère encore Jitsi en version auto-hebergée. Il existe même un plugin permettant d’intégrer Jitsi à Nextcloud.
Agenda
Nextcloud contient un agenda intégré sous la forme d’un plugin officiel. Nextcloud embarque un serveur CalDav permettant de synchroniser les calendriers des utilisateurs avec n’importe quel Agenda.
Tchat
Pour le textuel, je recommande Rocket.chat, une alternative au très connu Slack et qui permettant aux développeurs de communiquer facilement et instantanément. Un nombre important d’intégrations sont disponibles, comme le fait de lancer des appels video via Jitsi ou encore d’avoir Rocket.chat entièrement intégré avec Nextcloud.
Qualité de code
Pour la qualité de code, le leader incontesté est SonarQube. La version Community permet déjà pas mal de chose et un plugin gratuit permet même de disposer de l’analyse multi-branch qui est une fonctionnalité payante.
Gestion de projet
Gitea propose un kanban intégré pour la gestion de projet. Il est possible de définir les étapes souhaitées, des milestones, d’apposer des labels sur les tickets. L’avantage est que le tout est synchronisé avec le code.
Pour des besoins plus poussés, il existe Kanboard qui propose une intégration avec Gitea et Rocket.Chat.
CI/CD
Pour la CI/CD, gitea ne dispose pas (encore) de sa propre CI. Je recommande l’utilisation de DroneCI qui propose le support natif de Gitea. Drone propose un Pipeline en Yaml simple à appréhender. Chaque Job du pipeline est un plugin drone qui n’est autre qu’une image Docker. L’avantage est de pouvoir écrire très facilement des plugins dans le langage de notre choix.
Drone est de plus très léger. A l’opposé d’un Gitlab.
Sécurité
Plusieurs outils sont disponibles. Trivy permet par exemple de scanner les vulnérabilités des images Docker.
Pour le Code SonarQube, propose une analyse statique de code dès la version community. Il faudra par contre prendre l’édition développeur pour disposer de fonctionnalités avancées dans ce domaine.
Gestion des utilisateurs et des droits.
Afin de relier tout cela avec une seule et même identité, Keycloak est certainement l’option à considérer. Supportant le SSO via OIDC et Saml, il permettra de sécuriser l’ensemble des applications citées précédemment. L’avantage est d’avoir une gestion centralisée des accès et d’améliorer considérable l’expérience des développeurs.
Conclusion
Les outils présentés permettent de monter une forge de développeur performante, auto-hébergé sans se ruiner. On ne relancera pas le débat du coût entre offre SaaS et On Premise, la solution présentée ici, permet de facilement tester les avantages d’une forge sans être vendor lock-in par une solution propriétaire.