2016-02-03 3 views
0

J'ai un workflow Templates 2013 build xaml, qui appelle l'activité Microsoft.TeamFoundation.Build.Workflow.Activities.MSBuild une fois pour chaque solution que je veux créer. Lorsque msbuild.exe est appelé, son répertoire de travail est le répertoire de travail de la solution en cours de construction. Je peux le voir à travers la propriété 'MSBuildStartupDirectory' lors de l'exécution de msbuild avec une verbosité 'diagnostic'.Comment modifier le répertoire de travail msbuild dans le flux de travail TFS 2013

Malheureusement, j'ai besoin du fonctionnement de msbuild.exe pour être ailleurs quand msbuild.exe démarre. C'est parce que j'utilise le runner MSBuild SonarQube qui impose des contraintes sur le répertoire à partir duquel msbuild est appelé.

J'ai regardé l'activité 'msbuild' et il n'y a aucun moyen de contrôler le répertoire de travail. Existe-t-il un autre moyen de contrôler le répertoire de travail de cette activité?

Répondre

0

Cela fait un moment que j'ai édité un modèle de processus de construction mais je crois que vous pourriez utiliser une activité qui exécute simplement une commande dans CMD et fournit la commande MSBuild complète. Je suis sûr qu'il y a des tonnes de variables que vous aurez besoin de configurer pour que cela fonctionne. Au lieu de modifier le modèle de processus de construction, avez-vous envisagé d'utiliser un script PowerShell dans le script Post-build pour exécuter SonarQube?

enter image description here

+0

Bonne suggestion pour le CMD. Mais si je dois passer par le chemin de la modification du workflow, je préfère remplacer beaucoup d'activités par un appel à un script powershell qui ferait tout (démarrer runner sonarQube, compiler, tester, arrêter le runner SonarQube). Cela simplifierait le flux de travail et mettrait la plus grande partie de la logique de construction dans mon script PowerShell. Je n'y suis pas encore mais je le considère sérieusement. – mabead

+0

Nous avons toujours évité de modifier les modèles de processus de construction, de sorte que nous n'avions pas à les «posséder» à long terme. Nous avons été en mesure d'utiliser MSBuild ou les scripts Pre/Post-build pour étendre les builds TFS avec succès. – chief7

0

Je n'ai toujours pas trouvé de moyen de contrôler le répertoire de travail msbuild. Mais puisque je sais que le répertoire de travail sera le répertoire du projet en construction par msbuild, j'ai créé un nouveau fichier proj à la racine de mon espace de travail (où mon répertoire de travail doit être) et ne construis ce nouveau fichier proj qu'à partir de workflow. Ce nouveau fichier proj construit ensuite toutes mes autres solutions. De cette façon, mon répertoire de travail est le même pour toutes les solutions en cours de construction.

Voici un exemple de mon niveau supérieur fichier proj:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> 
    <ItemGroup> 
    <Solutions Include="**\*.sln"/> 
    </ItemGroup> 

    <Target Name="Build"> 
    <MSBuild Projects="@(Solutions)" Targets="Build"/> 
    </Target>  
</Project> 

Mais méfiez-vous que faire cela peut affecter le répertoire de sortie (OutDir) donnée à chaque solution. Donc, vous voudrez peut-être faire quelque chose comme ceci:

<MSBuild Projects="@(Solutions)" Targets="Build" Properties="OutDir=$(OutDir)..\%(Solutions.Filename)"/>