Bonjour à tous,
Pour un projet professionnel en embarqué (STM32, AVR et FPGA), j’aimerai mettre en place toute une configuration me permettant d’avoir ma toolchain de compilation, mes tests automatisées et un git bien propre. Pour le moment je suis seul dessus mais je serai rejoins par d’autre développeurs et j’aimerai commencer proprement avant qu’ils arrivent.
Il me semble que ça rentre dans le domaine du "devops" mais je n’y connais absolument rien.
Docker
Pour la toolchain de compilation, je pense utiliser Docker, que je n’ai encore jamais utilisé. Mon objectif est d’avoir la même toolchain sur mon PC, sur le serveur et sur le PC des autres personnes qui me rejoindraient. Plusieurs questions cependant concernant Docker :
- L’avez-vous déjà utilisé dans le domaine de l’embarqué ? Peut-on, depuis un container, flasher un microcontrôleur ?
- Imaginons que j’ai deux applications à développer utilisant deux toolchains différentes (une STM32 et une autre AVR8), on est d’accord que je passerai par deux containers ? Maintenant si j’ai deux applications à développer en AVR8, j’utilise un seul container ou deux containers avec la même toolchain ?
Comment ça s’utilise dans la vie de tous les jours ? Je lance mon container contenant toolchain en mode intéractif, en montant un volume vers /app du container pour que je puisse y accéder depuis VSCode. Quand je veux compiler/flasher je fais juste un make dans mon container (en mode interactif du coup) et voilà ? Ça fonctionne aussi simplement que cela ?
Git
J’ai lu de nombreuses fois que pour avoir un git "propre", le mieux était de créer une branche pour chaque fonctionnalité/bug fix. Ça me permet d’utiliser un système de tickets c’est bien ça (Gerrit ?) ? J’ai lu aussi qu’il fallait désactiver les commits et les merges sur master. Autant les commits ça me semble logique autant les merges je vois pas pourquoi. Comment est-ce que j’applique les modifications de ma branche sur master ? Quelles pratiques utilisez-vous pour utiliser Git sur un gros projet avec de nombreuses personnes ?
CI
J’aimerai qu’à chaque fois que je souhaite appliquer des modifications sur master, les tests soient lancés. Il me semble que ça s’appelle l’intégration continue. Je le vois beaucoup dans le web mais pas grand chose pour l’embarqué. Comment est-ce que cela se passe ? Je branche mes boards au serveur directement et en utilisant un service de CI (comme Jenkins?) je peux définir mes règles ? ("S’il y a des modifications sur master, lance le container docker, flash les boards et effectue les tests"). Existe t-il des périphériques permettant de couper le courant aux boards qui seraient connectées au serveur en USB ? Je vais avoir besoin de tester le comportement de mon système lorsqu’il perd un FPGA ou un microcontroleur.
Je ne sais pas dans quelle catégorie ce question rentre (Git ou CI ?) mais je voudrais m’assurer qu’avant chaque commit, les fichiers C suivent bien les règles syntaxiques que nous aurions préalablement définies. Je l’ai déjà fait en JavaScript avec ESLint et c’était vraiment sympa. Quels outils me permettraient de faire ça en C et en C++ ? Dois-je mettre ça dans un git hook ou directement dans une pipeline CI ? J’imagine que les deux fonctionnent mais que la pipeline est plus flexible ?
Cela va faire une semaine que je me renseigne sur ce sujet mais ça m’a l’air d’être un domaine extrêmement vaste avec des nouveautés toutes les semaines que je préfère faire appel à votre expérience. Je sais que mon post peut faire un peu brouillon avec des idées qui partent dans tous les sens, je m’en excuse.
Je vous remercie pour vos réponses.