手动触发TFS团队构建

时间:2008-10-10 13:33:52

标签: tfs build-automation team-build build

您如何从团队构建中手动触发其他团队构建?例如,当我们在CC.Net中时,如果某些构建成功,则会触发其他构建。第二个构建可以是使用此组件的项目,也可以是针对同一组件的其他长期运行的测试库。

2 个答案:

答案 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:&quot;Your Build Definition To Run&quot;" />

  </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