2016-09-26 1 views
0

Ceci est en ce qui concerne les meilleures pratiques liées à la construction d'applications. Nous suivons le principe de développement git flow. Nous utilisons du bambou pour construire mais cela n'a pas vraiment d'importance. Ma question est, est-il généralement préférable d'avoir des builds planifiés ou des builds automatisés ou des builds manuels? Je pense personnellement que les constructions automatisées ou manuelles sont la voie à suivre et voici pourquoi. Les constructions automatisées interrogeront une branche particulière (probablement la branche de développement) et lorsqu'elles détecteront une modification, elles initieront une construction. C'est génial parce que vous créez toujours une construction quand il y a du nouveau code à construire. Le mauvais côté est que si vous avez une équipe de 5 et que tout le monde fusionne leur branche de fonctionnalité dans le développement 1 minute après l'autre alors vous aurez 5 builds différents.Build Automation Process

Ce qui m'amène à pourquoi je crois que les constructions manuelles sont les meilleures. Une fois que vous avez les changements de tout le monde, vous pouvez lancer une build. Cela permettra de limiter le nombre de builds.

Qu'est-ce que SO pense des options? Laquelle est la pratique standard de l'industrie pour une équipe CI/CD efficace?

Répondre

1

Je pense que toute opinion sur la façon dont vous gérez les builds dépend de ce que vous appréciez dans votre processus et ce n'est pas clair d'après votre question.

En aparté; la plupart des systèmes de construction ne nécessitent pas de construction distincte pour chaque commit. Si vous avez plusieurs validations au développement dans votre intervalle d'interrogation, vous devriez être capable de les tester/déployer toutes en une seule construction. Cela pourrait être bon ou mauvais pour vous.

Intégration continue

L'intégration continue devrait vous donner un processus de développement plus lisse et plus rapide avec l'assurance que votre projet est dans un état amovible (ou au moins passer ses propres tests, nous espérons que c'est la même chose). J'ai constaté que les constructions manuelles échouent systématiquement à appliquer le même niveau de qualité. Il est trop facile de commettre des changements "sachant" qu'elle sera corrigée avant la prochaine génération manuelle qui commence à glisser de plus en plus loin ou quand une compilation échoue, il est soudainement difficile de savoir lequel des changements a introduit l'échec. Pour une intégration continue, je m'attendrais non seulement à des versions automatisées de votre branche de développement, mais également à des versions automatisées de chaque branche d'entités montrant qu'elles passent vos tests avant leur fusion en développement.

Dans de nombreux environnements, il est possible que le coût d'une construction CI soit négligeable par rapport au coût de l'équipe de développement. Par exemple, je suis actuellement en train de regarder un projet avec une moyenne d'environ 5 committers actifs et seulement 12 builds par jour au cours des 4 dernières années. Garder les tests rapides et fiables n'est pas facile, mais il devrait y avoir beaucoup de builds (en même temps dans le cas des branches).

Il existe des environnements dans lesquels le processus de test d'une construction ne peut pas être bon marché ou rapide, par ex. vous devez exécuter des tests de matériel ou des tests de performance qui prennent des heures. Dans ces cas, vous avez besoin d'une approche différente, mais vous n'êtes probablement pas en mesure de pratiquer une intégration continue et votre stratégie de développement/de branchement devrait refléter cela.

Livraison continue

livraison en continu va encore plus loin et raccourcit le temps de cycle du développement aux changements atteindre vos utilisateurs en déployant tous ceux libérables builds. S'il y a une étape manuelle dans le processus de libération (ou d'annulation) de ces builds, je ne crois pas que vous devriez appeler votre processus «livraison continue».

Vous pouvez avoir un très bon processus de déploiement automatisé sans être continu. La livraison continue peut être très utile pour certains produits, mais peut aussi être perturbatrice et inadaptée aux autres. Par exemple, nous déployons actuellement en permanence sur une application Web destinée aux consommateurs. Nous maintenons également des outils opérationnels backend où nous sommes plus conservateurs quant à quand libérer (ou au moins quand activer de nouvelles fonctionnalités) puisque les changements à ces outils peuvent introduire de nouveaux flux de travail que nous ne voulons pas apparaître au milieu du changement de quelqu'un sans avertissement .

tl; dr

Automatiser tout, ne ralentit pas votre équipe vers le bas en essayant de maintenir le nombre de builds petits.