我有一个夜间脚本应该构建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>
由于
答案 0 :(得分:0)
您可以为SolutionsToBuild添加任意数量的配置(例如,我们构建了几个独立的库解决方案,然后构建了两个不同的应用程序,这些应用程序是使用相同的源代码构建的(一个解决方案),但是使用#define来构建两个配置改变输出代码)
只有在构建完成时才会调用一次,但该处理程序可以根据需要运行尽可能多的进程/步骤来部署结果(在我们的示例中,我们构建了两个已编译的应用程序以及一堆资源文件到10个不同的客户特定的安装程序,因此我们的后期构建有10个“步骤”,每个步骤产生另一个最终输出。)
您可以将命令放置到自己的目标中,这样就可以很容易地包含/排除构建中的不同结果,如果您需要定期切割和更改内容 - 但是一旦设置好了,很可能无论如何你都不需要经常改变它。然后,必须知道构建所有这些变体这一事实的唯一“特殊情况”代码将是构建后目标,这将完全取决于您需要的任何目标。所以它最终很整洁。