1

J'ai une configuration d'intégration continue en utilisant Hudson et dernièrement j'ai configuré les travaux pour utiliser svn update pour obtenir la dernière version du code. J'aime vraiment cette approche, car elle permet à msbuild d'exécuter la version de façon appropriée et de ne construire que les assemblages affectés.Comment puis-je conserver les avertissements du compilateur dans Hudson (CI) lors de l'utilisation de SVN Update?

Cependant, j'ai remarqué que puisque je ne recompile pas tous les assemblages, je perds tous les avertissements du compilateur pour ces assemblages s'ils ne sont pas construits.

Par exemple, si j'ai 3 ensembles avec des dépendances démontrées par indentation:

  • Assemblée 1 10 avertissements
    • Assemblée 2 (selon le 1) 10 avertissements
      • Assemblage 3 (Dépend de 2) 10 avertissements

La première construction construira tous les 3 ensembles et connectez-vous 30 avertissements.

Ensuite, si je ne change que l'Assembly 3, Hudson ne construira que l'Assembly 3 et je ne recevrai que 10 warnings pour cette build, marquant ainsi 20 warnings comme "fixed". Pour autant que je sache, il n'y aura aucun moyen de contourner cela, mais j'aimerais savoir si quelqu'un a configuré Hudson pour conserver ces avertissements du compilateur d'un build à l'autre.

Editer: Oui Je réalise que cela peut se transformer en un débat de "vous devriez/ne devriez pas faire de mise à jour sur une boîte CI", mais il y a des raisons que nous sommes allés avec l'approche de mise à jour.

Répondre

1

Je changerais votre approche pour une construction CI. Faire une construction incrémentale sur une machine de construction est très trompeur, et seulement de valeur marginale (à mon humble avis) et à moins que votre système soit de la taille d'un système d'exploitation, vous ne gagnez probablement pas beaucoup de temps.Si vous avez des assemblages qui ne changent pas souvent ou jamais, empaquetez-les en tant que dépendances "tierces" (peut-être même dans un module de fusion pour que votre déploiement puisse les récupérer facilement) et ne les reconstruisez pas avec votre CI. . D'autre part, si tous vos assemblages sont volatils (doivent être reconstruits plus d'une fois dans un cycle de publication), construisez-les tous, tout le temps.

+0

En quoi est-ce trompeur? Ma boîte de CI va encore construire et produire les versions les plus récentes des assemblages. De plus, en effectuant une mise à jour par rapport à un effacement complet, notre assemblage 50-75 est passé de 15 minutes à une moyenne de 2 à 3 minutes, ce qui en vaut la peine pour nous. –

+1

Peut-être que je suis trop conservateur, mais je ne crois pas tout ce qui n'est pas une construction propre. Les constructions incrémentales peuvent cacher des choses subtiles comme l'introduction de dépendances circulaires qui casseraient une construction propre. Mais ouais 15+ jusqu'à 2-3 minutes change l'équation. – dkackman

+0

Je suis d'accord avec dkackman sur la confiance, mais pas nécessairement sur le grand changement dans l'équation. –

0

Vous effectuez l'intégration continue pour voir comment un assemblage interfère avec les autres assemblages. Donc, s'ils ont des dépendances, vous devriez tout construire. Si elles n'ont pas de dépendances, créez un travail par assembly (dans votre cas 3).

La version que vous décrivez n'est pas une version complète, elle est uniquement une version mise à jour et doit être effectuée sur la machine du développeur.

EDIT: Versioning Problème

Vous pouvez configurer Hudson (en relation avec SVN) d'ignorer commits par certains utilisateurs. En utilisant cette liste noire, il ne devrait pas y avoir de problème avec msbuild faisant le versioning.

+0

À droite, nous effectuons une mise à jour par construction car il n'est pas nécessaire de reconstruire les assemblages qui n'ont pas été modifiés. Les développeurs individuels mettent à jour les versions et terminent les reconstructions selon leurs besoins. Je pense que vous aurez du mal à faire valoir que les versions de CI ne devraient pas être mises à jour (au cas où vous y alliez). De plus, en faisant une mise à jour, nous autorisons msbuild à gérer le versioning comme discuté ici: http://stackoverflow.com/questions/1126880/how-can-i-auto-increment-the-c-assembly-version-via- our-ci-platform-hudson –

+0

J'ai édité la question pour indiquer que ces 3 assemblages sont liés –

+0

Ma définition de connexe est, que si un projet en amont change, cela pourrait entraîner la rupture de la construction des projets en aval. Par conséquent, une construction complète est nécessaire. Si ce n'est pas le cas, ils sont indépendants. –

0

Eh bien, msbuild fait ce qu'il devrait faire: Il consigne uniquement les avertissements qu'il a rencontrés.

Si vous devez utiliser svn mise à jour, la seule façon serait d'une certaine façon:

  • analyser le journal de construction et de déterminer quels ensembles ne sont pas construits
  • foreach Assemblée unbuilt
    • regarder la avertissements pour la dernière fois que cet assemblage particulier a été construit
    • manuellement porter ces avertissements vers l'avant, dans la version actuelle.

Il peut/ne peut pas être difficile à manier et il devrait avoir une compréhension correcte du format journal msbuild.

On pourrait aussi prétendre qu'il est trompeur puisque vous enregistreriez des avertissements qui n'ont pas été consignés pour cette version particulière.

+0

Il suffit d'avoir trois builds individuels et vous aurez toujours les bons avertissements pour chaque assemblage. –

+0

J'ai honnêtement pensé à cela, mais idk comment c'est faisable sur un projet à grande échelle –

Questions connexes