Генерация определения сборки tfs 2010 - PullRequest
3 голосов
/ 09 декабря 2011

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

1 Ответ

2 голосов
/ 09 декабря 2011

Я бы предложил создать пользовательскую утилиту, которую вы используете для создания ветви, которая будет выполнять операцию ветвления в управлении версиями, а также создавать определение сборки для соответствия.Ниже приведен код для создания определения сборки с использованием API-интерфейса TFS.

В качестве альтернативы вы можете создать веб-службу, которая подписывается на CheckInEvent из службы событий TFS, и проверить детали, чтобы убедиться, что это была операция ветвления.и программным путем создайте определение сборки оттуда.

Ниже код был бесстыдно скопирован из этого замечательного сообщения в блоге: http://geekswithblogs.net/jakob/archive/2010/04/26/creating-a-build-definition-using-the-tfs-2010-api.aspx

string teamProject = "TeamProjectName";
string buildController = "BuildControllerName";

TfsTeamProjectCollection server = new TfsTeamProjectCollection(new Uri("http://<tfs>:<port>/tfs"));
server.EnsureAuthenticated();
IBuildServer buildServer = (IBuildServer)server.GetService(typeof(IBuildServer));

var buildDefinition = buildServer.CreateBuildDefinition(teamProject);
buildDefinition.Name = "TestBuild";
buildDefinition.Description = "description here...";

buildDefinition.ContinuousIntegrationType = ContinuousIntegrationType.Individual;


buildDefinition.Workspace.AddMapping("$/Path/project.sln", "$(SourceDir)", WorkspaceMappingType.Map);
buildDefinition.Workspace.AddMapping("$/OtherPath/", "", WorkspaceMappingType.Cloak); 

buildDefinition.BuildController = buildServer.GetBuildController(buildController); 
buildDefinition.DefaultDropLocation = @"\\SERVER\Drop\TestBuild"; 

//Get default template 
var defaultTemplate = buildServer.QueryProcessTemplates(teamProject).Where(p => p.TemplateType == ProcessTemplateType.Default).First(); 
buildDefinition.Process = defaultTemplate;

//Set process parameters 
var process = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters); 

//Set BuildSettings properties 
BuildSettings settings = new BuildSettings(); 
settings.ProjectsToBuild = new StringList("$/pathToProject/project.sln"); 
settings.PlatformConfigurations = new PlatformConfigurationList(); 
settings.PlatformConfigurations.Add(new PlatformConfiguration("Any CPU", "Debug"));
process.Add("BuildSettings", settings);

buildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process); 

buildDefinition.RetentionPolicyList.Clear();
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.Succeeded, 10, DeleteOptions.All);
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.Failed, 10, DeleteOptions.All);
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.Stopped, 1, DeleteOptions.All);
buildDefinition.AddRetentionPolicy(BuildReason.Triggered, BuildStatus.PartiallySucceeded, 10, DeleteOptions.All);

buildDefinition.Save(); 
...