团队构建 - 部署多个配置

时间:2010-01-16 22:03:48

标签: tfs team-build

我有一个夜间脚本应该构建Debug和Release 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>

由于

1 个答案:

答案 0 :(得分:0)

您可以为SolutionsToBuild添加任意数量的配置(例如,我们构建了几个独立的库解决方案,然后构建了两个不同的应用程序,这些应用程序是使用相同的源代码构建的(一个解决方案),但是使用#define来构建两个配置改变输出代码)

只有在构建完成时才会调用一次,但该处理程序可以根据需要运行尽可能多的进程/步骤来部署结果(在我们的示例中,我们构建了两个已编译的应用程序以及一堆资源文件到10个不同的客户特定的安装程序,因此我们的后期构建有10个“步骤”,每个步骤产生另一个最终输出。)

您可以将命令放置到自己的目标中,这样就可以很容易地包含/排除构建中的不同结果,如果您需要定期切割和更改内容 - 但是一旦设置好了,很可能无论如何你都不需要经常改变它。然后,必须知道构建所有这些变体这一事实的唯一“特殊情况”代码将是构建后目标,这将完全取决于您需要的任何目标。所以它最终很整洁。