【问题标题】:TFS: Query for builds containing a specific changesetTFS:查询包含特定变更集的构建
【发布时间】:2016-02-11 05:09:26
【问题描述】:

我有许多基于 TFS 中的单个分支(例如 Main)执行的构建定义。

我想(以某种方式)查询 TFS 以查找包含我提供的特定变更集编号的所有构建,并返回 TFS 包含的构建名称的字符串列表。任何类型的应用程序(VS 扩展程序、CLI 应用程序、winforms 等等)都可以。

注意:这不是“请给我代码”请求;我愿意为此付出努力并认真工作。任何指向有关如何查询数据库或 SDK 的文档的指针,或如何查询构建的示例;只是一些开始寻找的地方将非常有帮助。谢谢。

【问题讨论】:

    标签: build tfs-sdk


    【解决方案1】:

    以下 sn-p 将抓取集合的所有团队项目的所有构建定义,并将检查每个构建是否与输入变更集编号的关联:

    using System;
    using System.Linq;
    using Microsoft.TeamFoundation.Build.Client;
    using Microsoft.TeamFoundation.Client;
    using Microsoft.TeamFoundation.VersionControl.Client;
    
    namespace FindChangesetInBuild
    {
        class Program
        {
            static void Main(string[] args)
            {
                TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfs:8080/tfs/collectionName"));
    
                var versionControl = teamProjectCollection.GetService<VersionControlServer>();
                var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
    
                var teamProjects = versionControl.GetAllTeamProjects(true);
                foreach (var teamProject in teamProjects)
                {
                    var buildDefinitions = buildService.QueryBuildDefinitions(teamProject.Name);
                    foreach (var buildDefinition in buildDefinitions)
                    {
                        var builds = buildService.QueryBuilds(buildDefinition);
                        foreach (var buildDetail in builds)
                        {
                            var changesets = InformationNodeConverters.GetAssociatedChangesets(buildDetail);
                            if (changesets.Any(changesetSummary => changesetSummary.ChangesetId == Convert.ToInt32(args[0])))
                            {
                                Console.WriteLine("Changeset was build in "+buildDetail.BuildNumber);
                            }
                        }
                    }
                }
            }
        }
    }
    

    不用说,这是一种蛮力攻击。
    如果你缩小buildDefinition的列表,你可以进一步细化代码,专注于特定的teamProjects等等。无论如何我很难想象以上内容按原样有用!

    除了(显然)MSDN,Shai Raiten 的blog 是 TFS-SDK 的一个很好的资源。
    对于特定于构建的示例,请查看 @ 987654323@ & here 获取一些可能有趣的 SO 帖子。

    【讨论】:

    • 谢谢!我希望查询时有更多可用的过滤选项;我们有许多构建需要保留信息,查询需要很长时间才能返回。我会试验看看。
    【解决方案2】:

    您可以在 TFS 2010 中使用这个小数据库查询,只需将 90264 替换为您的变更集 ID。

    USE Tfs_Warehouse
    go
    SELECT BuildName 
    FROM DimBuild
       INNER JOIN FactBuildChangeset
       ON DimBuild.BuildSK = FactBuildChangeset.BuildSK
    WHERE FactBuildChangeset.ChangesetSK = 90264
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2017-07-31
      • 2016-01-12
      • 2015-01-03
      • 2010-12-14
      相关资源
      最近更新 更多