Есть ли способ скопировать определение сборки? Я работаю по основной методологии управления версиями, которая использует множество различных ветвей, которые существуют в течение очень коротких периодов времени (например, от нескольких дней до недели). Я действительно хотел бы скопировать шаблон сборки и просто изменить решение для сборки. Есть какой-либо способ сделать это?
Как я могу скопировать определение сборки TFS 2010?
Ответы (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;
}
Вы можете загрузить новые инструменты TFS 2010. У него есть возможность клонировать определение сборки.
См. http://msmvps.com/blogs/molausson/archive/2010/10/21/clone-a-build-definition.aspx в качестве примера.
Примечание: имейте в виду, что клонирование работает только тогда, когда вы НЕ открывали окно сборки.
Следующий инструмент (VS Addin) удовлетворит ваши требования>
Менеджер сборки TFS сообщества
http://visualstudiogallery.msdn.microsoft.com/16bafc63-0f20-4cc3-8b67-4e25d150102c
Мне просто нужно было скопировать определения сборки, и я нашел ответ Джима выше, чтобы быть полезным. Однако, будучи новичком в TFS API, мне потребовалась помощь в подключении к серверу и получении существующего определения сборки с помощью кода. Эти две ссылки помогли заполнить пробелы:
http://msdn.microsoft.com/en-us/library/bb286958.aspx
Вы можете щелкнуть правой кнопкой мыши определение сборки и выбрать «клонировать определение сборки», чтобы скопировать файл определения. Затем вы можете отредактировать его оттуда.
Вот решение, если вы хотите переместить определение сборки из одного командного проекта в другой командный проект.
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
}
Из вашего сообщения неясно, какой шаблон используется вашим определением сборки (по умолчанию, обновление или управление лабораторией). Если я правильно понимаю, вы хотели бы легко настроить определение сборки, которое строит то же решение, но из другой ветки.
Вместо копирования определения вы можете попробовать отредактировать его. Когда ветка умирает, переименуйте определение сборки (может помочь с отчетом), измените отображение рабочей области сборки, и все готово.
Спасибо, Ладислав