2010-01-16 87 views
0

我有一個夜間腳本,應該構建調試和發佈zip文件,然後通過ftp將這些文件上傳到客戶端。團隊構建 - 部署多個配置

我總是使用AfterDropBuild部署單一配置 - 工作正常 - 但在單個版本中構建兩個配置似乎都不起作用。我希望AfterDropBuild會執行兩次。我當然可以在AfterDropBuild中編寫任務來處理這兩個配置,但這並不正確。

有沒有更好的方法?

<Target Name="AfterDropBuild"> 
    <CreateProperty Value="$(DropLocation)\ToClient"> 
     <Output PropertyName="DeploymentFolder" TaskParameter="Value" /> 
    </CreateProperty> 
    <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)"> 
     <Output TaskParameter="BuildNumber" PropertyName="BuildNumber"></Output> 
    </GetBuildProperties> 
    <CreateProperty Value="%(ConfigurationToBuild.FlavorToBuild)"> 
     <Output PropertyName="ConfigFlavor" TaskParameter="Value" /> 
    </CreateProperty> 

    <MakeDir Directories="$(DeploymentFolder)" /> 

    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" Name="ZipSite" 
       Message="Zipping Site"> 
     <Output TaskParameter="Id" PropertyName="ZipStepID" /> 
    </BuildStep> 
    <!-- get a list of all the files in the published web sites --> 
    <CreateItem Include="$(OutDir)_PublishedWebSites\Site.Web\**\*.*" > 
     <Output TaskParameter="Include" ItemName="FilesToZip"/> 
    </CreateItem> 
    <CreateItem Include="$(OutDir)\Site.msi" > 
     <Output TaskParameter="Include" ItemName="FilesToZip"/> 
    </CreateItem> 

    <!-- zip the deployment files --> 
    <Zip Files="@(FilesToZip)" 
     ZipFileName="$(DeploymentFolder)\Site_$(BuildNumber)_$(ConfigFlavor).zip" 
     WorkingDirectory="$(OutDir)_PublishedWebSites\Site.Web" /> 

    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" Id="$(ZipStepId)" Status="Succeeded" /> 

    <!-- upload the zip --> 
    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" Name="UploadZip" 
       Message="Uploading Zip to Client"> 
     <Output TaskParameter="Id" PropertyName="ZipUploadID" /> 
    </BuildStep> 

    <CreateItem Include="$(DeploymentFolder)\*.zip" > 
     <Output TaskParameter="Include" ItemName="FilesToUpload" /> 
    </CreateItem> 

    <FtpUpload 
     RemoteUri="ftp://ftp.blahblah.com/" 
     LocalFiles="@(FilesToUpload)" 
     RemoteFiles="@(FilesToUpload->'%(RecursiveDir)%(Filename)%(Extension)')" 
     UserName="user" 
     Password="password" 
     /> 
    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
      BuildUri="$(BuildUri)" Id="$(ZipUploadID)" Status="Succeeded" /> 
    </Target> 

感謝

回答

0

,只要你喜歡的SolutionsToBuild(您可以添加儘可能多的配置,比如我們建立若干獨立的庫解決方案,然後被從相同的源代碼(一個解決方案建立了兩個不同的應用程序),但從兩個配置使用#define修改輸出代碼構建)

當構建完成時,您只會調用一次,但該處理程序可以根據需要運行儘可能多的流程/步驟來部署結果(在我們的情況中,我們將兩個已編譯的應用程序以及一批資源文件構建成10個不同的客戶特定的應用程序c安裝程序,所以我們的後期構建有10個「步驟」,每個步驟產生另一個最終輸出)。

您可以將這些命令放到自己的目標中,這樣就可以很容易地包含/排除構建的不同結果,如果您需要定期切割和更改內容 - 但是一旦設置好了,無論如何你不需要經常改變它。然後,必須知道所有這些變體都將被構建的唯一「特殊情況」代碼將是構建後的目標,這將僅取決於您需要的任何目標。所以它結束了很整潔。

+0

謝謝,這幾乎是我所設想的。如果PackageBinaries或AfterDropBuild爲每個配置運行一次,它會更好。 – Jonesie 2010-01-18 17:30:11