您如何从团队构建中手动触发其他团队构建?例如,当我们在CC.Net中时,如果某些构建成功,则会触发其他构建。第二个构建可以是使用此组件的项目,也可以是针对同一组件的其他长期运行的测试库。
答案 0 :(得分:4)
你可以做到的一种方法是你可以为你的TFSBuild.proj文件提供一个AfterEndToEndIteration目标,它将运行TfsBuild.exe命令行来启动你的其他构建。我在想这样的事情(虽然我没有测试过)
<Target Name="AfterEndToEndIteration">
<GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Condition=" '$(IsDesktopBuild)' != 'true' ">
<Output TaskParameter="Status" PropertyName="Status" />
</GetBuildProperties>
<Exec Condition=" '$(Status)'=='Succeeded' "
Command="TfsBuild.exe start /server:$(TeamFoundationServerUrl) /buildDefinition:"Your Build Definition To Run"" />
</Target>
答案 1 :(得分:3)
我做过同样的事情,马丁曾多次提出过这个问题(他的博客对此毫无帮助,BTW)。但是,我最终需要触发这样的级联构建(基于其他一些复杂的规则),我创建了一个自定义任务来完成它。保持您的构建脚本美观和精益,并为您提供更多的灵活性和封装可能性。
public override bool Execute()
{
IBuildDefinition[] buildDefinitions = BuildServer.QueryBuildDefinitions(ProjectName);
foreach (IBuildDefinition build in buildDefinitions)
{
if(build.Enabled) //I did a bunch of custom rules here
{
Log.LogMessage(String.Concat("Queuing build: ", build.Name));
BuildServer.QueueBuild(build);
}
}
return true;
}
在Aaron Hallberg的博客上还有一些更好的东西:
http://blogs.msdn.com/aaronhallberg/archive/2007/04/24/team-build-object-model-queueing-a-build.aspx