Exécuter des tests unitaires dans Jenkins / Hudson en mode automatisé de dev pour construire serveur

Nous sommes en train d'exécuter un Jenkins (Hudson) serveur CI de construire et d'offrir nos .net de projets web et base de données des projets. Tout fonctionne très bien mais je veux commencer à écrire des tests unitaires et ensuite seulement passer le construire si les tests unitaires passent. Nous sommes en utilisant le construit en tâche msbuild pour construire le projet web. Avec les arguments suivants ...

MsBuild Version           .NET 4.0
MsBuild Build File    ./WebProjectFolder/WebProject.csproj  
Command Line Arguments    ./target:Rebuild /p:Configuration=Release;DeployOnBuild=True;PackageLocation=".\obj\Release\WebProject.zip";PackageAsSingleFile=True

Nous avons besoin pour exécuter des tests automatisés sur notre code qui s'exécutent automatiquement lorsque nous nous appuyons sur nos machines (post-construction de l'événement peut-être), mais aussi de fonctionner lorsque Jenkins fait construire pour ce projet.

Si vous l'exécutez comme cela, il ne construit pas les tests unitaires pour le projet, car le projet web ne fait pas référence au projet de test. Le projet de test serait de référence de projet web, mais je suis assez sûr que ce serait le dépeçage de notre automatisé construit comme ils existent principalement pour construire et assembler nos déploiements. L'exécution de ces tests devraient être un pas dans la version automatique et processus du package.

Options ...

  1. Créer deux Jenkins emplois. un pour exécuter les tests ... si les tests passent de l'autre construire est déclenché, ce qui construit et les paquets de projet web. Mettre le post créer un événement sur le projet de test.
  2. Construire la solution au lieu de le projet (assurez-vous que la solution contient les tests requis) et de mettre des post construire des événements sur tous les projets de test pour exécuter le nunit console pour exécuter les tests. Ensuite, utilisez la ligne de commande pour copier tous les fichiers requis à partir de chacun des bin et le contenu des répertoires dans un package.
  3. Juste construire le projet de test dans jenkins à la place de la projet web dans jenkins. Le projet de test serait de référence du projet web (en fonction de ce que vous faites des tests) et de le construire.

Problèmes ...

  1. Il y a deux emplois, et non pas un. Deux choses à déboguer pas un. Pour voir si les tests passés et de construire et compiler le projet web. Les tests peuvent passer mais la construction pourrait échouer si ses quelque chose qui n'est pas utilisée par ce que vous faites des tests ...
  2. Cela exige de nous de savoir exactement ce qui se passe dans la construction. Maintenant msbuild fait tout pour nous. Si vous avez plusieurs équipes travaillant sur un projet, à chaque fois, un dossier supplémentaire est créé, vous avez à vous soucier de la possibilité fragile instructions de ligne de commande.
  3. Cela semble être une corruption de notre objectif principal. Les essais doivent être une étape dans ce processus, pas la préoccupation la plus importante dans ce processus. Je suis également pas sûr à 100% qu'une version déclenchée est la même que la normale construire-t-il tout de même des choses comme une normale de construire. Déplacer tous les fichiers de la même manière toutes les déplacer dans les mêmes répertoires etc.

Problème Initial.

Nous voulons exécuter nos tests à chaque fois que notre principal projet est construit. Mais l'ajout d'un événement post-construction pour le projet web qui va à l'encontre du projet de test ne fonctionne pas parce que le projet ne fait pas référence au projet de test et de ne pas déclencher un build de ce projet. Je pourrais continuer ... mais c'est assez ...

Nous avons passé environ une semaine à essayer de faire que cela fonctionne bien, mais que nous n'avons pas réussi. N'hésitez pas à modifier si vous sentez que vous pouvez obtenir une meilleure réponse ...

OriginalL'auteur Kevin Donde | 2012-10-24

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *