Как я могу скопировать определение сборки TFS 2010?

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


person devlife    schedule 26.05.2010    source источник


Ответы (7)


Для этого вы можете написать надстройку. Вот код для копирования существующего определения сборки:

static IBuildDefinition CloneBuildDefinition(IBuildDefinition buildDefinition)
{
    var buildDefinitionClone = buildDefinition.BuildServer.CreateBuildDefinition(
        buildDefinition.TeamProject);

    buildDefinitionClone.BuildController = buildDefinition.BuildController;
    buildDefinitionClone.ContinuousIntegrationType = buildDefinition.ContinuousIntegrationType;
    buildDefinitionClone.ContinuousIntegrationQuietPeriod = buildDefinition.ContinuousIntegrationQuietPeriod;
    buildDefinitionClone.DefaultDropLocation = buildDefinition.DefaultDropLocation;
    buildDefinitionClone.Description = buildDefinition.Description;
    buildDefinitionClone.Enabled = buildDefinition.Enabled;
    buildDefinitionClone.Name = String.Format("Copy of {0}", buildDefinition.Name);
    buildDefinitionClone.Process = buildDefinition.Process;
    buildDefinitionClone.ProcessParameters = buildDefinition.ProcessParameters;

    foreach (var schedule in buildDefinition.Schedules)
    {
        var newSchedule = buildDefinitionClone.AddSchedule();
        newSchedule.DaysToBuild = schedule.DaysToBuild;
        newSchedule.StartTime = schedule.StartTime;
        newSchedule.TimeZone = schedule.TimeZone;
    }

    foreach (var mapping in buildDefinition.Workspace.Mappings)
    {
        buildDefinitionClone.Workspace.AddMapping(
            mapping.ServerItem, mapping.LocalItem, mapping.MappingType, mapping.Depth);
    }

    buildDefinitionClone.RetentionPolicyList.Clear();

    foreach (var policy in buildDefinition.RetentionPolicyList)
    {
        buildDefinitionClone.AddRetentionPolicy(
            policy.BuildReason, policy.BuildStatus, policy.NumberToKeep, policy.DeleteOptions);
    }

    return buildDefinitionClone;
}
person Jim Lamb    schedule 09.06.2010

Вы можете загрузить новые инструменты TFS 2010. У него есть возможность клонировать определение сборки.

См. http://msmvps.com/blogs/molausson/archive/2010/10/21/clone-a-build-definition.aspx в качестве примера.

Примечание: имейте в виду, что клонирование работает только тогда, когда вы НЕ открывали окно сборки.

person Ewald Hofman    schedule 04.11.2010

Следующий инструмент (VS Addin) удовлетворит ваши требования>

Менеджер сборки TFS сообщества

http://visualstudiogallery.msdn.microsoft.com/16bafc63-0f20-4cc3-8b67-4e25d150102c

person ansariwn    schedule 02.03.2012

Мне просто нужно было скопировать определения сборки, и я нашел ответ Джима выше, чтобы быть полезным. Однако, будучи новичком в TFS API, мне потребовалась помощь в подключении к серверу и получении существующего определения сборки с помощью кода. Эти две ссылки помогли заполнить пробелы:

http://msdn.microsoft.com/en-us/library/bb286958.aspx

http://geekswithblogs.net/jakob/archive/2010/04/26/creating-a-build-definition-using-the-tfs-2010-api.aspx

person dan9298    schedule 03.11.2010
comment
В итоге я использовал TFS Power Tools Sept 2010, который содержит команду Clone Build Definition. - person devlife; 04.11.2010

Вы можете щелкнуть правой кнопкой мыши определение сборки и выбрать «клонировать определение сборки», чтобы скопировать файл определения. Затем вы можете отредактировать его оттуда.

person dah97765    schedule 12.08.2011

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

    public void MoveBuild(string fromTeamProject, string toTeamProject, string buildName, string newBuildName)
    {

        var _server = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new

        Uri("http://Mytfs:8080/defaultcollection"));

        IBuildServer _buildServer = _server.GetService<IBuildServer>();

        var buildDetails = _buildServer.QueryBuildDefinitions(fromTeamProject);

        foreach (var fromBuild in buildDetails)
        {
            if (fromBuild.Name != buildName) continue;
            var newBuildDefinition = _buildServer.CreateBuildDefinition(toTeamProject);
            newBuildDefinition.Name = !string.IsNullOrEmpty(newBuildName) ? newBuildName : fromBuild.Name;

            newBuildDefinition.BuildController = fromBuild.BuildController;

            // This finds the template to use 
            foreach (var mapping in fromBuild.Workspace.Mappings)
            {
                newBuildDefinition.Workspace.AddMapping(
                    mapping.ServerItem, mapping.LocalItem, mapping.MappingType, mapping.Depth);
            }
            newBuildDefinition.DefaultDropLocation = fromBuild.DefaultDropLocation;
            newBuildDefinition.Description = fromBuild.Description;
            // buildDefinition.Workspace.AddMapping(build.Workspace.);
            newBuildDefinition.Process = _buildServer.QueryProcessTemplates(fromBuild)[2];

            newBuildDefinition.ProcessParameters = fromBuild.ProcessParameters;
            newBuildDefinition.Enabled = false;
            newBuildDefinition.Save();
        }//end of for each loop 

    }
person Mohammed Jawed    schedule 09.07.2012

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

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

Спасибо, Ладислав

person Ladislau Szomoru    schedule 26.05.2010