【问题标题】:update the TFS build definitions automated way自动更新 TFS 构建定义
【发布时间】:2018-08-18 17:20:51
【问题描述】:

我们正在从 TFS2010 迁移到 TFS2015 update3。 我们想用新的 TFS2015 XAML 控制器和代理名称更新所有现有的 TFS2010 XAML 构建定义。有没有一种自动化的方式可以实现这一点,因为它需要在所有现有的构建定义上完成。

【问题讨论】:

    标签: tfs


    【解决方案1】:

    您可以尝试使用 TFS API 来更新 XAML 构建定义:

    以下示例供您参考:(有关详细信息,请参阅此线程:Updating the build definition for many TFS projects

    将其称为BuildControllerChangeUtil http://tfsserver:8080/tfs/defaultcollection ProjectName,其中projectname 是其构建已更新构建服务器的项目。

    using Microsoft.TeamFoundation.Build.Client;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.WorkItemTracking.Client;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace BuildControllerChangeUtil
    {
        class Program
        {
            static void Main(string[] args)
            {
                string tfsDefaultcollection = args[0];
                string knownGoodProject = args[1];
    
                var tfs = new TfsTeamProjectCollection(new Uri(tfsDefaultcollection)); 
                var buildServer = tfs.GetService<IBuildServer>();
                var knownGoodDefs = buildServer.QueryBuildDefinitions(knownGoodProject);
                var testController = knownGoodDefs.First(bd => bd.Name.Equals("Test")).BuildController ;
                var releaseController = knownGoodDefs.First(bd => bd.Name.Equals("Release")).BuildController ;
    
    
                foreach (var teamProject in GetTfsProjects( tfsDefaultcollection ))
                {
                    var buildDetails = buildServer.QueryBuildDefinitions(teamProject);
                    if (!buildDetails.Any())
                    {
                        Console.WriteLine("{0} has no build defintions. ", teamProject);
                    }
                    foreach (var thisBuild in buildDetails)
                    { 
                        if (thisBuild.Name.ToUpperInvariant().Contains("TEST"))
                        {
                            SetBuildController(teamProject, thisBuild, testController);
                        }  
                        else if (thisBuild.Name.ToUpperInvariant().Contains("PRODUCTION"))
                        {
                            SetBuildController(teamProject, thisBuild, releaseController);
                        }  
                        else
                        {
                            Console.Error.WriteLine( "Team project {0} had an unknown build name {1}",teamProject , thisBuild.Name);
                        }
                    } 
                }
    
            }
    
            private static void SetBuildController(string teamProject, IBuildDefinition thisBuild, IBuildController bc)
            {
                Console.WriteLine("setting {0} build {1} build controller to {2}", teamProject , thisBuild.Name, bc.Name );
                thisBuild.BuildController = bc;
                thisBuild.Save();
            }
    
            private static IEnumerable<string> GetTfsProjects(string tfsAddress)
            {
                var tpcAddress = new Uri(tfsAddress);
                var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tpcAddress);
    
                tpc.Authenticate();
    
                var workItemStore = new WorkItemStore(tpc);
                var projectList = (from Project pr in workItemStore.Projects select pr.Name).ToList();
    
                return projectList;
            }
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多