TFS2010 и однажды скомпилируйте стратегию - PullRequest
2 голосов
/ 13 декабря 2011

Я пытаюсь реализовать одну стратегию компиляции в TFS2010, и мне нужно немного узнать, как это сделать. На CI я хочу скомпилировать все (например, отладочную версию и версию выпуска) и запустить unittest. В следующем определении сборки я хочу запустить интеграционные тесты на том же наборе двоичных файлов, скомпилированных в CI. Конвейер сборки может выглядеть следующим образом

checkin -> Шаг 1 CI: compile + unittest -> Шаг 2 Nightly: интеграционные тесты -> Шаг 3 Release: настройка и упаковка

Я не уверен, возможно ли получить последний успешный билд из другого билда команды с места выпадения. Это решило бы мою проблему на шаге 2, когда мне нужно получить предварительно скомпилированные двоичные файлы с шага 1.

Какие-либо общие замечания или предложения относительно получения последней успешной сборки из другой сборки def?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Вообще говоря, если вы хотите предоставить входные данные для сборки, есть два подхода:

  • скопировать результаты сборки 1 в безопасную папку за пределами обычной папки сборки.Build 2 затем копирует то, что ему нужно, обратно в свою рабочую папку.

  • проверяет результаты сборки 1 в tfs, готовые к будущим сборкам для получения и использования.

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

Вопрос, который возникает у меня в голове: зачем вам делать компиляцию один раз?Для CI вы должны стремиться к инкрементальной сборке, чтобы вы могли как можно быстрее развернуть сборки.Для ночных тестовых и релизных сборок вы хотите перестроить все с нуля, а не полагаться на то, что инкрементные сборки работают идеально (чего они никогда не делают - в конечном итоге исходный код и двоичные файлы становятся немного не синхронизированными, а сборка дает неверный результат или не может работать).полный).

0 голосов
/ 13 декабря 2011

Возможно, что Step 2 Nightly - это не определение сборки, это консольное приложение, которое:

  1. Извлекает последнюю последующую сборку
  2. Извлекает двоичные файлы этой сборки израсположение сброса сборки
  3. Выполняет тесты и, в зависимости от их успеха (или нет), выполняет определенные действия (например, отправка электронных писем или применение метки в системе контроля версий).

Эти действия также могут быть выполнены в сильно настроенном шаблоне процесса сборки, где основные этапы сборки, такие как CreateWorkspace и Run MSBuild, отрублены, и вышеуказанная логика реализована вручную.

На вашем месте я бы пошел на C #консольное приложение, которое использует TFS-SDK, выполняет вышеперечисленное и запускается один раз в день.


РЕДАКТИРОВАТЬ
Принимая во внимание ваши комментарии,Я не понимаю, почему мое предложение убирает вас с конвейера сборки.
В любом случае, сердце и шаг Step2 (по крайней мере, в моем понимании) состоит в том, чтобы извлечь местоположение отбрасывания предыдущей успешной сборки и затем выполнить некоторые действия над находящимися там двоичными файлами.

Этопоиск может выглядеть примерно так:

using System;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;

namespace GetDropLocationOfLastGoodBuild
{
    class Program
    {
        static void Main()
        {
            TfsTeamProjectCollection tpc =
                TfsTeamProjectCollectionFactory.GetTeamProjectCollection(
                    new Uri("TFSURI"));

            IBuildServer buildService = (IBuildServer) tpc.GetService(typeof (IBuildServer));
            IBuildDefinition buildDefinition = buildService.GetBuildDefinition("TeamProject", "BuildDefinitionName");
            Uri buildUri = buildDefinition.LastGoodBuildUri;
            IBuildDetail buildDetail = buildService.GetAllBuildDetails(buildUri);

            String binariesOfLastGoodBuild = buildDetail.DropLocation;
        }
    }
}

После извлечения места сброса вы сможете начинать любые запланированные действия.
Все необходимые данные находятся в buildDetail.

Теперь это может выполняться как пользовательская операция сборки с сильно настроенным шаблоном процесса сборки или как отдельное запланированное консольное приложение.
Лично я бы сделал последнее и настроил бы его с помощью планировщика задач Windows, чтобы он выполнялся один раз в день на моем сервере сборки.

...