Comment est organisée l'intégration continue dans les grandes entreprises?

11

Dans mon entreprise, il est courant de ne pas faire de build intermédiaire pour vérifier comment chaque branche fonctionnalité / correction de bug est fusionnée dans dev. Il n'y a qu'une version quotidienne, ce qui provoque toujours beaucoup d'échecs de test et d'erreurs de génération. On m'a dit qu'il n'était pas raisonnable de construire pour chaque fusion pour plus de 1000 développeurs.

J'ai donc cherché comment CI est organisé dans les entreprises qui ont autant de développeurs ou plus (Microsoft, Facebook), et je n'ai rien trouvé. Peut-être que les initiés pourront me le dire alors?

Megamozg
la source
@gnat Êtes-vous adéquat? Comment est-ce lié? J'ai demandé une expérience d'initiés et j'ai cité les entreprises par exemple. Je n'ai demandé aucun support client.
Megamozg
11
@gnat Je ne vois pas comment cela est lié à cela. Megamozg: CI est organisé par module de projets, il n'y a pas de module avec 1000 développeurs. Donc, s'il y a trop de monde, réduisez votre projet / module en plus petite partie.
Walfrat
@Walfrat c'est totalement lié. Ce site n'est pas destiné à faire des sondages / sondages auprès d'initiés de grandes entreprises sur la façon dont leurs entreprises font diverses choses. Si quelqu'un est curieux de savoir des choses comme ça, ils devraient utiliser les canaux de support de ces entreprises
moucher
@gnat Je ne vois vraiment pas comment le lien que vous avez fourni s'applique, en particulier avec le commentaire que vous avez fourni en réponse à Walfrat. Sur la base de ce commentaire, cette IMHO serait le lien approprié (la partie sur les questions de type de sondage) softwareengineering.meta.stackexchange.com/a/6490
Newtopian

Réponses:

12

Il s'agit essentiellement d'un problème de mise à l'échelle. Vous séparez votre travail en modules, qui peuvent être différents projets et / ou différentes fonctionnalités de votre produit.

Vous auriez des équipes qui couvrent des ensembles de ces modules. Chacune de ces équipes aurait des cycles de CI configurés pour leurs étendues, et seulement après que leurs cycles respectifs seraient passés, le code serait poussé vers les référentiels principaux, où le cycle de CI maître serait exécuté.

Le cycle CI maître sera très probablement différent des cycles CI de niveau équipe sur ces aspects:

  • Les cycles CI au niveau de l'équipe n'ont pas à construire le code de l'entreprise entière, seulement les modules dont ils sont responsables et les modules dépendants. S'il y a deux modules complètement indépendants et dans des équipes différentes, ils ne feraient pas partie du cycle CI de l'autre équipe.
  • Les cycles CI au niveau de l'équipe peuvent avoir des tests automatisés beaucoup plus détaillés que le cycle CI maître. Le cycle Master CI comporterait des tests de vérification d'intégrité et des tests de régression qui, selon la taille de la solution principale, seraient exécutés quotidiennement ou même chaque semaine, car ces tests peuvent parfois prendre plus de 24 heures à exécuter.

Ce que vous devez faire avec cette approche est de fournir une transmission automatisée des référentiels locaux au référentiel central une fois le cycle CI local passé, de peur que vos développeurs ne passent énormément de temps à pousser le code vers les référentiels centraux.

Vladimir Stokic
la source
7

En plus de ce que @Vladimir_Stokic a dit, sur certaines équipes (la mienne a environ 150 développeurs), nous construisons plus fréquemment que toutes les 24 heures. Chaque fois qu'un commit se produit, nous démarrons un minuteur de 5 minutes. Une fois les 5 minutes écoulées, tous les commits survenus au cours de l'intervalle de 5 minutes sont combinés et générés. La génération est généralement une génération incrémentielle. Nous avons un générateur distinct qui exécute des tests unitaires pour chaque build qui se produit. Une fois la génération terminée, s'il y a eu d'autres validations pendant la génération (ce qui prend entre 1 et 45 minutes selon ce qui a changé), toutes les modifications en attente sont générées, etc. Nous avons également une version nocturne (propre, complète), mais les versions qui se produisent sur chaque commit (grossièrement) nous indiquent très rapidement si les tests échouent.

user1118321
la source