как искать определения сборки в TFS, которые больше не используются?

Может ли кто-нибудь помочь мне понять приведенный ниже запрос. На самом деле в наших tfs у нас есть огромное количество определений сборки, которые пока не используются, поэтому я хочу удалить старое определение сборки, выполнив поиск всех сборок, которые старше более одного года.

как искать определения сборки в TFS2013, которые больше не используются??

Пожалуйста помоги.

Спасибо,


person Dhurva    schedule 09.06.2017    source источник


Ответы (1)


Вы можете запросить определения старше одного года с помощью этого запроса в SQL Server.

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

Но поскольку определения больше не используются, вам необходимо получить последнюю сборку для каждого определения и проверить, была ли сборка FinishTime предшествующей году (где [FinishTime] ‹ '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();
}

Ссылка на этот поток: API TFS - Как запрашивать сборки независимо от того, к какому определению сборки они принадлежат

Обновление: на основе комментариев @Dhurva ниже:

Мы также можем использовать утилиту из github TFS Manager, которая находит все определения сборки из командного проекта: https://github.com/jelledruyts/TfsTeamProjectManager

person Andy Li-MSFT    schedule 12.06.2017
comment
Большое спасибо, приятель. Но я нашел одну утилиту из github TFS Manager, которая находит все определения сборки из командного проекта. - person Dhurva; 16.06.2017
comment
@Dhurva Рад узнать, что вы решили проблему с помощью утилиты. Не могли бы вы поделиться ссылкой на утилиту и обходной путь для выполнения требования здесь, а затем пометить его как ответ? Так как это может быть полезно другим членам сообщества, читающим эту ветку. - person Andy Li-MSFT; 30.06.2017
comment
Конечно @Энди. Пожалуйста, найдите ссылку на эту утилиту. github.com/jelledruyts/TfsTeamProjectManager. Просто загрузите этот код из git hub, создайте его и используйте эту утилиту. Спасибо. - person Dhurva; 30.06.2017
comment
@Dhurva Спасибо, что поделились, я обновил ответ выше, вы можете и принять это как ответ. Это может быть полезно другим членам сообщества, читающим эту ветку. - person Andy Li-MSFT; 05.07.2017