Question

La configuration d'un serveur d'intégration, je suis dans le doute sur la meilleure démarche à l'égard de l'utilisation de plusieurs tâches pour terminer la construction.Est la meilleure façon de mettre le tout dans un gros tas ou de faire de petits dépendantes?

Était-ce utile?

La solution

Vous avez certainement envie de diviser les tâches.Voici un bel exemple de CruiseControl.NET configuration de différentes cibles (tâches) pour chaque étape.Il utilise également une commune.construire un fichier qui peut être partagé entre les projets avec peu de personnalisation.

http://code.google.com/p/dot-net-reference-app/source/browse/#svn/trunk

Autres conseils

J'utilise TeamCity avec un nant le script de construction.TeamCity facilite la configuration du serveur CI partie, et nant construire le script, il est facile de faire un certain nombre de tâches aussi loin que la génération de rapport est concerné.

Voici un article que j'ai écrit sur CI avec l'aide de CruiseControl.NET il a un nant le script de construction dans les commentaires qui peuvent être ré-utilisés dans les projets:

Intégration continue avec CruiseControl

L'approche que je privilégie est la configuration suivante (en Fait, en supposant que vous êtes dans un .Projet NET):

  • CruiseControl.NET.
  • NANT des tâches pour chaque étape.Nant.Contrib pour la variante CC modèles.
  • NUnit pour exécuter les tests unitaires.
  • NCover pour effectuer la couverture de code.
  • FXCop pour l'analyse statique des rapports.
  • La Subversion de commande de la source.
  • CCTray ou similaire sur toutes les boîtes de dev pour recevoir des avis de constructions et d'échecs, etc.

Sur de nombreux projets que vous trouvez qu'il y a différents niveaux de tests et des activités qui ont lieu quand quelqu'un fait un checkin.Parfois, ceux-ci peuvent augmenter dans le temps, au point où il peut être un long temps après une accumulation avant qu'un dev peut voir si ils ont brisé le construire avec un checkin.

Ce que je fais dans ces cas est de créer trois versions (ou peut-être deux):

  • Un CI de construire est déclenchée par l'arrivée et le nettoyage SVN Obtenir, de Construire et de pistes léger tests.Idéalement, vous pouvez garder cela à l'minutes ou moins.
  • Un service plus complet de construire ce qui pourrait être à l'heure (si des changements) qui fait la même chose que la CI, mais fonctionne plus complet et le temps des tests.
  • Une nuit de construire qui fait tout et dirige également la couverture de code et l'analyse statique des assemblées et exécute toutes les étapes de déploiement de construire quotidien des packages MSI etc.

La chose à propos de tout système CI, est qu'il doit être organique et constamment modifié.Il y a quelques extensions CruiseControl.NET le journal et tableau de construire des timings etc pour les étapes et vous permettre de faire de l'analyse historique, et vous permettent ainsi de constamment ajuster les versions à garder leur dynamique.C'est quelque chose que les gestionnaires ont du mal à accepter une version boîte sera probablement vous tenir occupé pendant un cinquième de votre temps de travail juste pour arrêter de broyage pour une halte.

Nous utilisons buildbot, avec la construction décomposé en étapes distinctes.Il y a un équilibre à trouver entre le fait d'avoir étapes de génération être décomposé avec suffisamment de granularité et d'être une unité complète.

Par exemple à mon poste actuel, nous construisons le sous-pièces pour chacun de nos plates-formes (Mac, Linux, Windows) sur leurs plateformes respectives.Nous avons alors une seule étape (avec un peu de sous étapes) qui compile dans la version finale qui sera à la fin de la finale de distributions.

Si quelque chose va mal dans l'un de ces étapes, il est assez facile à diagnostiquer.

Mon conseil est d'écrire les étapes sur un tableau blanc en des termes vagues comme vous pouvez et puis la base de vos pas sur que.Dans mon cas, ce serait:

  1. Construire Plugin Pièces
    1. Compiler pour Mac
    2. Compiler pour PC
    3. Compiler pour Linux
  2. Finale des Plugins
  3. Exécuter le Plugin tests
  4. Construire intermédiaire IDE (Nous avons pour l'amorçage de la construction)
  5. Construire final IDE
  6. Exécuter des tests IDE

Je serais certainement briser les emplois.Les Chances sont que vous êtes susceptible de faire des changements dans les builds, et il sera plus facile pour suivre les problèmes si vous avez des petites tâches à la place de la recherche au travers d'un monolithique construire.

Vous devriez être en mesure de créer un gros travail de petites pièces, de toute façon.

G'day,

Comme vous parlez de test d'intégration de mon grand (évident) conseil serait de rendre le serveur de test construit et configuré en tant que proche que possible de l'environnement de déploiement que possible.

</thebloodyobvious> (-:

cheers, Rob

Briser vos tâches en discret objectif/activités, puis d'utiliser un niveau supérieur de script pour les relier tous ensemble de manière appropriée.

Cela rend votre processus de construction plus facile à comprendre pour les autres personnes (vous filmez comme vous allez donc quelqu'un de votre équipe peuvent le ramasser, non?), ainsi que l'augmentation du potentiel de réutilisation.Il est probable que vous n'aurez pas réutiliser le haut niveau des scripts (bien que cela pourrait être possible si vous avez des projets similaires), mais vous pouvez certainement réutiliser (même si c'est copier/coller) les opérations discrètes plutôt facilement.

Prenons l'exemple de l'obtention de la source la plus récente à partir de votre référentiel.Vous aurez envie de regrouper les tâches/opérations pour récupérer le code avec quelques traces de référence et les informations relatives au compte.C'est le genre de chose qui est très facile à réutiliser d'un projet à l'autre.

Pour mon équipe, de l'environnement, nous utilisons NAnt car elle fournit une commune de l'environnement de script entre dev machines (où nous écrire/déboguer les scripts) et le serveur CI (puisque nous venons d'exécuter les mêmes scripts dans un environnement propre).Nous utilisons Jenkins pour gérer nos builds, mais à leur cœur de chaque projet est l'appelant dans le même NAnt scripts et puis nous manipuler les résultats (c'est à dire, archives de la sortie de la construction, le drapeau à défaut des tests, etc).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top