2013-02-15 11 views
5

Ich verwende TFS 2012, um eine Build einer Lösung zu automatisieren, die mehrere Windows-Dienste und zwei Web-Anwendungen enthält.Anpassen der Drop-Ordnerstruktur mit TFS-Team Build

Ich habe die Anleitung verwendet, die ich here gefunden habe, um die Buildprozessvorlage so anzupassen, dass die Windows-Dienste in eine Ordnerstruktur eingefügt werden, die ich mag. Im Einzelnen:

  1. \ dropserver \ droproot \ MyApp \ Buildnumber \
    • \ Dienste1
    • \ Service2
    • \ Service3
    • \ Service4

Dies funktioniert gut , aber leider funktioniert es nicht für Web-Anwendungen. Wenn ich dieselbe Strategie für diese verwenden würde, erhalte ich nur den Inhalt von/bin für jede Web-App und nicht den gesamten Inhalt der Website.

MSBuild verwendet normalerweise die Webanwendungsziele, um dies zu behandeln, aber aus irgendeinem Grund funktioniert dies nicht, wenn Sie den Build so anpassen, wie ich es getan habe. Ich erhalte den _PublishedWebSites-Ordner nicht mehr in der Build-Ausgabe. (Ich schätze, das liegt daran, dass ich die OutDir-Eigenschaft der MSBuild-Aufgabe gelöscht habe.)

Hat jemand so etwas getan und es auch mit Webanwendungen arbeiten lassen?

+2

Können Sie Ihre Website-Projekte in Notepad öffnen und prüfen, ob die folgenden da drin ist: True

Antwort

1

Mit ein wenig Anpassung, endete diese Lösung für mich Aufarbeitung:

http://www.edsquared.com/2011/01/31/Customizable+Output+Directories+For+TFS+2010+Build.aspx

Grundsätzlich haben, was dieser Link empfohlen, aber nutzte auch eine neue Lösung Konfiguration (die ich Teambuild genannt) statt bedingte Eigenschaftsdefinitionen.

Ich glaube, der Schlüssel zu all dies war die Weitergabe des outputDirectory als TeamBuildOutDir Argument an MSBuild. Durch das Einbetten dieser Variablenreferenz in die Variable "OutDir" oder "OutputPath" konnte Team Build den korrekten Stagingspeicherort erstellen und dann automatisch Dateien von diesem Speicherort in den Ablageordner kopieren.

Ich werde das ein wenig weiter nehmen und die ganze _PublishedWebSites-Sache loswerden, aber das wird komplett im Build-Workflow gemacht.

EDIT: TFS 2013 nativ unterstützt dies mit einer einfach Konfigurationsoption bauen:

enter image description here

+0

Ich habe auch die EdSquared-Lösung mit großer Wirkung verwendet. Ich empfehle es sehr. Es gibt einige Details in den Kommentaren, die zu beachten sind (d. H. Die OutDir-Eigenschaft muss mit einem nachgestellten Schrägstrich enden usw.). – efisher

1

Ich denke, ich kann dabei helfen, es sieht aus wie in den Build-Zielen, dass der Ordner veröffentlichte Websites nicht erstellt wird, wenn der OutDir der gleiche wie der OutputPath ist.

Das ist also nicht perfekt, aber wenn Sie das folgende in die csproj Datei in der ersten Eigenschaftsgruppe hinzufügen, finden Sie alles zum Einsatz in „\ bin \ deploy \“, einschließlich der _PublishedWebsites Ordner

<DeployOnBuild>True</DeployOnBuild> 
<OutDir>bin\deploy\</OutDir> 
erhalten
+0

dies nun einen Schuss geben ... warum muss ich angeben das zweimal? – RMD

+0

Ich habe das zu meiner proj-Datei hinzugefügt, aber es scheint keinen Unterschied gemacht zu haben. Wenn ich die "TeamBuild" -Konfiguration in VS erstelle, bekomme ich die binäre Ausgabe in meine Zielverzeichnisstruktur kopiert, aber keiner der restlichen Webdateien (html, js, css, images, etc.) wird kopiert. – RMD

+0

Entschuldigung, ich habe etwas weiter unten verpasst, das war nicht wirklich das Problem zu lösen. Ich habe eine Änderung vorgenommen, die meiner Meinung nach helfen wird - obwohl sie nicht perfekt ist. –

0

Werfen Sie einen Blick auf diesen Thread als auch diesen Beitrag. Team Build: Publish locally using MSDeploy Da Sie alle Dateien für Ihre Webprojekte benötigen, müssen Sie den Veröffentlichungsprozess auslösen, und indem Sie das Ziel dieses Prozesses optimieren, können Sie alle Ihre Dateien dorthin kopieren, wo Sie sie benötigen. Ich denke, Option (2) von seiner Antwort wird für Sie arbeiten. Ich hoffe, dass hilft.

0

Wie ich in Ihrer Referenz link sehen kann, wird es nur die Binärdateien kompilieren und verpacken. Es stellt die Website nicht durch die darin genannten Schritte bereit.

Wenn Sie die .html, .css, .js usw. unter dem Ordner _PublishedWebSites erhalten möchten, müssen Sie eine Web-Bereitstellung tun. Dies können wir manuell tun, indem Sie auf die Option publish aus dem Kontextmenü Ihres VS-Projekts klicken und Veröffentlichungsmethode als Dateisystem auswählen.

Da Sie dies jedoch in Ihrem Build automatisieren und im benutzerdefinierten Ablageordner ablegen müssen, müssen Sie möglicherweise Ihr MSBuild-Skript bearbeiten, indem Sie eine AspNetCompiler Aufgabe aufrufen. Weitere Informationen hierzu erhalten Sie unter MSDN link. Durch Angabe des Werts TargetPath während Sie dieses Ziel aufrufen, können Sie Ihre Webdateien im entsprechenden benutzerdefinierten Ablageordner bereitstellen.

Happy Scripting.