2010-01-16 157 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

相关问题