IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Intégration Continue avec Visual Studio et Team Foundation Server - Partie II, Présentation de MsBuild et de TfsBuild

Intégration Continue avec Visual Studio et Team Foundation Server - Partie II, Présentation de MsBuild et de TfsBuild


précédentsommairesuivant

10. Tips & Tricks

10-1. Où puis-je trouver des tâches supplémentaires ?

Visual Studio et le TFS proposent un ensemble de tâches par défaut que l'on peut utiliser pour paramétrer notre build automatisé.

Cependant, on va rapidement avoir des besoins plus larges par exemple pour :

  • Lancer des outils en ligne de commande (FxCop, SandCastle, StyleCop, ...)
  • Manipuler la base de registre
  • Manipuler la GAC
  • Manipuler l'Active Directory
  • Travailler avec des fichiers textes ou XML
  • Créer ou configurer des sites webs dans IIS

Pour réaliser ce genre de tâches, il sera nécessaire de passer par d'autres types de tâches. On peut trouver sur CodePlex un projet qui nous expose plus d'une centaine de tâches supplémentaires répondant à la très grande majorité des besoins de paramétrage pour vos projets.

Vous pouvez télécharger ce projet sur http://www.codeplex.com/sdctasks.

10-2. Comment modifier le processus de « Get » dans le build ?

 

Si le processus de « Get » qui est fait par défaut dans le build ne vous convient pas (parce qu'il ramène trop de fichiers par exemple), il est possible de le modifier.

10-2-1. En modifiant le workspace utilisé par le build

Le build va récupérer l'intégralité des fichiers qui sont définis dans son workspace. A condition que la liste des fichiers à télécharger soit statique (13), on peut alors se contenter de ne travailler sur la liste de mapping du workspace utilisé par le build.

Pour la modifier :

  • Clic droit sur le build et choisir « Edit Build Definition »
  • L'onglet « Workspace » nous permet d'éditer les mappings

10-2-2. En paramétrant la tâche « Get » qui est faite par le serveur

Si par défaut le build télécharge l'intégralité des fichiers du workspace, il est possible de surcharger ce comportement de façon à ne récupérer que certains répertoires du workspace.

Pour cela, il suffit de redéfinir la propriété « GetFileSpec » qui est utilisée en interne.

Attention : ceci ne marchera que si le fichier ou répertoire que vous spécifiez ici apparaît bien dans votre workspace.
Cette propriété n'est en effet utilisée que pour faire un GET d'une partie du workspace.

10-2-3. En réécrivant la tâche « Get »

Enfin si aucune des solutions précédentes ne fonctionne, vous pouvez « tout simplement » réécrire vous même le processus de « Get » dans votre fichier de build.

Pour cela, on overridera le target « CoreGet ».

Target "CoreGet" dans sa version "par défaut"
Sélectionnez
<Target Name="CoreGet"
       Condition=" '$(SkipGet)'!='true' and '$(IsDesktopBuild)'!='true' "
       DependsOnTargets="$(CoreGetDependsOn)" >

 <!-- Get the sources for the given workspace-->
 <Get TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
      BuildUri="$(BuildUri)"
      Workspace="$(WorkspaceName)"
      Version="$(GetVersion)"
      Filespec="$(GetFilespec)"
      PopulateOutput="$(GetPopulateOutput)"
      Overwrite="$(GetOverwrite)"
      Preview="$(PreviewGet)"
      Recursive="$(RecursiveGet)"
      Force="$(ForceGet)">
   <Output TaskParameter="Gets" ItemName="Gets" />
   <Output TaskParameter="Replaces" ItemName="Replaces" />
   <Output TaskParameter="Deletes" ItemName="Deletes" />
   <Output TaskParameter="Warnings" ItemName="GetWarnings" />
 </Get>

 <SetBuildProperties Condition=" '$(GetVersion)' != '$(SourceGetVersion)' "
                     TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
                     BuildUri="$(BuildUri)"
                     SourceGetVersion="$(GetVersion)" />

 <PropertyGroup>
   <SourceGetVersion>$(GetVersion)</SourceGetVersion>
 </PropertyGroup>
 
</Target>

10-3. Comment peut-on récupérer des sources de plusieurs Team Project ?

Si vous avez besoin de récupérer des sources se situant dans un autre Team Project - pour que la compilation se passe correctement par exemple - alors le plus simple est de modifier le workspace de votre build.

Il s'agit en fait de modifier le processus de « Get », et vous trouverez les différentes façons de faire au paragraphe « Comment modifier le processus de « Get » dans le build ? ».

10-4. Je crée une propriété utilisant le « BuildNumber », mais celle-ci est vide. Pourquoi ?

Dans la section « Propriétés d'un fichier de build : les Properties et PropertyGroup », nous avions vu les différences entre propriétés statiques et propriétés dynamiques.

La propriété « BuildNumber » est une propriété créée dynamiquement par un Target du processus de build par défaut. Par conséquent, vous ne pouvez l'utiliser que dans une autre propriété créée dynamiquement.

Sinon, vous utiliseriez la propriété avant que sa valeur ne soit spécifiée.


précédentsommairesuivant
Par « statique », j'entends que la liste ne soit pas dépendante du moindre élément de configuration. On peut en effet se trouver face à des cas où certains fichiers ne seront récupérés que pendant les builds nocturnes de façon à travailler sur les conditions les plus proches de la production (où l'on ne va pas mocker certains éléments de l'application).

Copyright © 2009 Pierre-Emmanuel Dautreppe . Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.