代码之家  ›  专栏  ›  技术社区  ›  Mark

手动触发TFS团队构建

  •  5
  • Mark  · 技术社区  · 17 年前

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

    2 回复  |  直到 17 年前
        1
  •  4
  •   Martin Woodward    17 年前

    一种方法是将AfterEndToEndItemation目标添加到TFSBuild.proj文件中,该文件将运行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>
    
        2
  •  3
  •   joshua.ewer    17 年前

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

        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;
        }
    

    http://blogs.msdn.com/aaronhallberg/archive/2007/04/24/team-build-object-model-queueing-a-build.aspx