5

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

4

2 回答 2

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>
于 2008-10-10T15:33:09.973 回答
3

我在很多场合都做了马丁建议的同样的事情(他的博客非常有用,顺便说一句)。然而,我最终需要触发这样的级联构建(基于一些其他复杂的规则),以至于我创建了一个自定义任务来完成它。保持您的构建脚本简洁明了,并为您提供更多的灵活性和封装可能性。

    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

于 2008-11-14T17:53:55.770 回答