【问题标题】:How to get list of TFS builds running at the moment from command line?如何从命令行获取当前正在运行的 TFS 构建列表?
【发布时间】:2012-01-11 08:19:26
【问题描述】:

我正在尝试自动化部署过程,作为其中的一部分,我需要从命令行运行我的发布版本。我可以做到,使用像

这样的命令

.\TFSBuild start http://server-name:8080/tfs/project-collection project-name build-name priority:High /queue

它甚至返回一些用于排队构建的代码 — Build queued. Queue position: 2, Queue ID: 11057

我不知道的是,如何从 powershell 命令行获取有关当前运行的构建运行构建的状态的信息? 最终目标是在构建完成后开始发布。

我已经获得了所有必要的 powershell 脚本,可以根据构建结果创建部署包、压缩它、复制到生产环境并在那里安装。我现在只需要知道我的构建何时成功。

【问题讨论】:

    标签: powershell tfs tfsbuild


    【解决方案1】:

    此函数将等待具有 TFSBuild.exe 给出的队列 ID 的构建:

    function Wait-QueuedBuild {
        param(
            $QueueID
        )
    
        [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Build.Client')
        [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Client')
    
        $uri = [URI]"http://server-name:8080/tfs/project-collection"
        $projectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($uri)
        $buildServer = $projectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
        $spec = $buildServer.CreateBuildQueueSpec('*','*')
    
        do {
            $build = $buildServer.QueryQueuedBuilds($spec).QueuedBuilds| where {$_.Id -eq $QueueID}
            sleep 1
        } while ($build)
    }
    

    可以获取TFSBuild.exe返回的id,然后调用该函数。

    $tfsBuild = .\TFSBuild start http://server-name:8080/tfs/project-collection project-name build-name priority:High /queue
    Wait-QueuedBuild [regex]::Match($tfsBuild[-1],'Queue ID: (?<id>\d+)').Groups['id'].Value
    

    【讨论】:

      【解决方案2】:

      使用 E.Hofman 提供的 here 的工作,可以编写一个使用 TFS SDK 的 C# 控制台应用程序,并显示当前是否有任何构建代理正在运行,如下所示:

      using System;
      using Microsoft.TeamFoundation.Build.Client;
      using Microsoft.TeamFoundation.Client;
      
      namespace ListAgentStatus
      {
          class Program
          {
              static void Main()
              {
                  TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSServer:8080"));
                  var buildServer = teamProjectCollection.GetService<IBuildServer>();
      
                  foreach (IBuildController controller in buildServer.QueryBuildControllers(true))
                  {
                      foreach (IBuildAgent agent in controller.Agents)
                      {
                          Console.WriteLine(agent.Name+" is "+agent.IsReserved);
                      }
                  }
              }
          }
      }
      

      参数.IsReserved 是在构建执行期间切换为“真”的参数。

      很抱歉,我的 powershell 技能不足以提供上述的 PS 变体。请查看here,bwerks 的工作可能会帮助您做到这一点。

      【讨论】:

        【解决方案3】:
            # load classes for execution
        [Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") | Out-Null
        [Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") | Out-Null
        
        # declare working variables
        $Uri = New-Object System.Uri "http://example:8080/tfs"
        
        # get reference to projection collection
        $ProjectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($Uri)
        
        # get reference to build server
        $BuildServer = $ProjectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
        
        # loop through the build servers
        foreach($Controller in $BuildServer.QueryBuildControllers($true))
        {
            # loop through agents
            foreach($BuildAgent in $Controller.Agents)
            {
                Write-Host "$($BuildAgent.Name) is $($BuildAgent.IsReserved)"
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多