TFS 2010 Проблема с отслеживанием наборов изменений в сборках, которые являются результатом проверок Gated - PullRequest
2 голосов
/ 08 июня 2011

Чтобы получить информацию о том, какая Changeset была включена в состав Build, мы используем «Label Sidekick» из Team Foundation Sidekicks, где мы размещаем Label of the Build и ожидаем найти недавно созданную Changeset.

В нашем процессе разработки в TFS 2010 используются «закрытые» проверки, поэтому мы столкнулись с ситуацией, когда последние проверки не представлены в Sidekicks (на самом деле мы получаем набор изменений предыдущей сборки ). Это объяснимо, поскольку во время маркировки последние изменения еще не были зафиксированы.

BuildLog правильно сообщает о связанных изменениях.

Я провел несколько экспериментов в нашем шаблоне процесса сборки, но, похоже, не могу получить то, что нам нужно. Например, поместив действие «Маркировка» в область «Запуск агента», я получу сборку, которая с самого начала завершится неудачно: «Ссылка на объект не установлена ​​для экземпляра объекта». (Я полагаю, это связано с тем, что мне пришлось расширить область действия переменных 'Label' & 'Workspace', чтобы запустить вторую часть).
Состояние 'before' шаблона процесса сборки для этой попытки: здесь (это работает), состояние 'after' ("Object ref not set ..") здесь здесь .

Итак, чтобы подвести итог, мне могут помочь два разных типа ввода:

Как мне изменить наш шаблон процесса сборки, чтобы маркировка происходила после проверки Gated? (- Это рационализирует отображение в Sidekicks)

или

Как программно получить связанный набор изменений для каждой сборки? (- Это позволило бы мне написать небольшое приложение, которое могло бы устареть угол Sidekicks)

1 Ответ

3 голосов
/ 13 июля 2011

Вы можете использовать TFS API, чтобы сделать это.

        public static void GetBuild()
    {
        var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfsdevlonuk:8080/tfs/gazprom.mt"), new UICredentialsProvider());
        tfs.EnsureAuthenticated();
        var buildServer = tfs.GetService<IBuildServer>();

        // Get Project Name
        var versionControl = tfs.GetService<VersionControlServer>();
        var teamProjects = versionControl.GetAllTeamProjects(true);

        // Get Builds for a team project
        var buildDetails = buildServer.QueryBuilds(teamProjects[0].Name);

        // For each build
        foreach (IBuildDetail buildDetail in buildDetails)
        {
            // Get the build details
            var buildInfor = buildDetail.Information;

            // More build infor like shelveset, etc
            Debug.Write(buildDetail.LabelName + buildDetail.ShelvesetName);

        }

Приведенный выше код поможет вам получить подробные сведения о сборке. У меня есть несколько постов в блоге о том, как программно подключиться к tfs и использовать API tfs. http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1.aspx

...