Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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;
}

Ответ 2

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

См. http://msmvps.com/blogs/molausson/archive/2010/10/21/clone-a-build-definition.aspx для примера

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

Ответ 4

Мне просто нужно было скопировать определения конструкций, и нашлось, что Джим ответил выше, чтобы быть полезным. Однако, будучи новичком в 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

Ответ 5

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

Ответ 6

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

    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 

    }

Ответ 7

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

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

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