J'ai lu un peu sur les serveurs CI comme Jenkins et je me demande: à quel moment est-ce utile?
Parce que sûrement pour un petit projet où vous n'auriez que 5 classes et 10 tests unitaires, il n'y a pas vraiment besoin.
Ici, nous avons environ 1500 tests unitaires et ils passent (sur les anciennes stations de travail Core 2 Duo) en environ 90 secondes (car ils testent vraiment des "unités" et sont donc très rapides). La règle que nous avons est que nous ne pouvons pas valider le code lorsqu'un test échoue.
Ainsi, chaque développeur lance tous ses tests pour éviter la régression.
Évidemment, parce que tous les développeurs lancent toujours tout le test, nous détectons des erreurs dues à des changements conflictuels dès qu'un développeur tire le changement d'un autre (le cas échéant).
Ce n'est toujours pas très clair pour moi: dois-je configurer un serveur CI comme Jenkins? Qu'apporterait-il?
Est-ce juste utile pour le gain de vitesse? (pas un problème dans notre cas)
Est-ce utile parce que les anciennes versions peuvent être recréées? (mais nous pouvons le faire avec Mercurial, en vérifiant les anciens tours)
Fondamentalement, je comprends que cela peut être utile, mais je ne vois pas exactement pourquoi.
Toute explication tenant compte des points que j'ai soulevés ci-dessus serait la bienvenue.
la source
Vous n'avez probablement pas encore besoin de CI, mais je pense que cela deviendra utile lorsque vous arriverez à la phase de test. Jenkins est installé en quelques heures et cela simplifiera vos tests et vous aidera à éviter les erreurs stupides (cela se produit surtout lorsque vous dépêchez une solution rapide pour la production).
la source
Pour moi, un CI devient intéressant si votre équipe compte plus d'un membre.
Vous devez cesser de penser à CI comme "un autre PC exécutant les tests pour moi". CI pour avoir un processus de construction et une gestion des versions définis et automatisés .
CI est la seule entité faisant autorité qui crée votre version de logiciel. S'il ne s'appuie pas sur le CI, cela ne s'est tout simplement pas produit.
Avec un CI, vous avez des restrictions pour automatiser tout ce qui vous montrera tous les ajustements, hacks et raccourcis manuels que vous avez en place et ne fonctionne tout simplement pas avec un CI et devrait être évité en premier lieu.
Problèmes évités:
Avantages (trop nombreux pour tous les mentionner):
la source
Il y a un problème fondamental à propos de l'intégration continue (CI) qui se reflète parfaitement dans votre question: les pratiques de CI sont difficiles à mettre en œuvre et à défendre car le logiciel de serveur CI n'est pas trivial à configurer, ni à mettre en place et à exécuter vos projets via un CI serveur. Avec cela, il devient difficile de voir réellement où est le gain à adopter le CI du tout.
Tout d'abord, CI est synonyme de perspicacité et de qualité. Un bon CI vous rapproche de votre projet, vous fournit des commentaires appropriés sur les mesures de qualité, la documentation, la conformité aux normes de codage, etc. associez un ensemble de modifications à un instantané spécifique de toutes ces mesures de projet.
Il ne s'agit pas seulement d'exécuter des tests unitaires. Pas du tout! Ce qui m'amène à la qualité. CI accepte les erreurs, il ne les évite pas et ne les jette pas. Ce qu'il fait, c'est tout simplement de vous fournir un outil pour sortir tôt, plutôt que plus tard. Donc, vous ne validez pas vraiment le code précédemment testé sur un serveur CI. Bien que vous devriez vous efforcer de valider du code propre et non cassé, vous utilisez en fait le serveur CI pour exécuter automatiquement un générateur d'intégration automatiquement via votre code et le faire évaluer si tout s'est bien passé. Si c'est le cas, c'est parfait! Si ce n'est pas le cas, pas de problème - les bonnes pratiques de CI indiquent que votre prochaine priorité devrait être simplement de réparer tout ce qui est cassé. Qui, dans un bon serveur CI, devrait être facilement indiqué pour vous.
À mesure que la taille d'une équipe augmente, l'intégration du code de chacun devient naturellement plus difficile. Ce devrait être la tâche d'un serveur CI centralisé de tester toutes les pièces intégrées et d'alléger ce fardeau des membres de l'équipe. Donc, vous devez obliger tout le monde à s'engager tôt (et aussi proprement que possible), puis à surveiller l'état des builds (il y a généralement des notifications envisagées). Et encore une fois, si quelque chose se casse à cause de l'engagement d'un développeur, il devient immédiatement de sa responsabilité de résoudre ce problème et de remettre ces versions automatisées à l'état OK immédiatement.
Donc, vous voyez, à mon avis, chaque projet bénéficie d'une intégration continue. Le fait est que, jusqu'à présent et en raison de la complexité époustouflante de chaque serveur CI que je connais, les gens ont vraiment repoussé les pratiques CI sur des projets plus petits / plus simples. Parce que, allez, les gens ont mieux à faire que de passer des jours à configurer un logiciel laid, trop complexe, sous-performant et gonflé.
J'ai eu exactement le même problème, et c'est ce qui m'a fait développer Cintient pendant mon temps libre depuis environ un an maintenant. Ma prémisse était de le rendre simple à installer, à configurer et à utiliser, et à lui faire livrer des mesures de qualité que tout le monde échoue ou sous-distribue. Donc, après cette longue réponse, vient ma fiche éhontée de souligner le lien GitHub pour le projet (qui est gratuit et open-source, natch). Il a également de belles captures d'écran, apparemment. :-) https://github.com/matamouros/cintient
J'espère que je vous ai aidé.
(REMARQUE: édité après le commentaire de Bryan Oakley, sur le fait que j'aurais dû prendre plus de temps pour élaborer une meilleure réponse. Je pense également qu'il avait raison.)
la source