如何在TFS中搜索不再使用的构建定义?

时间:2017-06-09 06:05:10

标签: tfs tfsbuild build-definition

任何人都可以帮助我理解下面的查询,实际上在我们的tfs中我们有大量的构建定义到目前为止还没有使用它因此我想删除旧的构建定义通过搜索那些旧的多于一个年。

如何在TFS2013中搜索不再使用的构建定义?

请帮忙。

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以在SQL Server中通过此查询查询超过一年的定义。

 SELECT [DefinitionId],[DefinitionVersion],[DefinitionName]   FROM [Tfs_CollectionLC].[Build].[tbl_Definition]
 WHERE [CreatedOn] < '2016-06-12 00:00:00.000'

但是由于定义不再使用,您必须为每个定义获取最后一个构建,并检查构建 FinishTime 是否在一年前(其中[FinishTime]&lt;'2016 -06-12 00:00:00.000')。

您可以使用TFS API / Client API获取构建详细信息,包括构建 FinishTime ,然后相应地过滤它们。您可以参考以下代码来枚举每个团队项目并获取最新构建状态对于每个定义:

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://tfs:8080"));

var vcs = tfs.GetService<VersionControlServer>();

var teamProjects = vcs.GetAllTeamProjects(true);

IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));

foreach (TeamProject proj in teamProjects)
{
    var defs = buildServer.QueryBuildDefinitions(proj.Name);

    System.Console.WriteLine(string.Format("Team Project: {0}", proj.Name));

    foreach(IBuildDefinition def in defs)
    {
        IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(proj.Name, def.Name);
        spec.MaxBuildsPerDefinition = 1;
        spec.QueryOrder = BuildQueryOrder.FinishTimeDescending;

        var builds = buildServer.QueryBuilds(spec);

        if (builds.Builds.Length > 0)
        {
            var buildDetail = builds.Builds[0];

            System.Console.WriteLine(string.Format("   {0} - {1} - {2}", def.Name, buildDetail.Status.ToString(), buildDetail.FinishTime));
        }                
    }

    System.Console.WriteLine();
}

引用此主题:TFS API - How to query builds independent of which build definition they belong to

更新:根据@ Dhurva的评论

我们还可以使用github TFS Manager中的实用程序从团队项目中查找所有构建定义: https://github.com/jelledruyts/TfsTeamProjectManager