Есть ли способ скопировать определение сборки? Я работаю в методологии управления основными источниками, которая использует много разных отраслей, которые живут очень короткое время (т.е. Несколько дней в неделю). Я бы очень хотел скопировать шаблон сборки и просто изменить решение для сборки. Есть ли способ сделать это?
Как я могу скопировать определение сборки TFS 2010?
Ответ 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 работает только тогда, когда вы не открыли окно сборки.
Ответ 3
Следующий инструмент (VS Addin) будет соответствовать вашему требованию >
Диспетчер сборки сообщества TFS
http://visualstudiogallery.msdn.microsoft.com/16bafc63-0f20-4cc3-8b67-4e25d150102c
Ответ 4
Мне просто нужно было скопировать определения конструкций, и нашлось, что Джим ответил выше, чтобы быть полезным. Однако, будучи новичком в TFS API, мне нужна помощь в подключении к серверу и получении определения существующей сборки с помощью кода. Эти две ссылки помогли заполнить пробелы:
Ответ 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
Из вашего сообщения не ясно, какой шаблон является вашим определением сборки, используя (по умолчанию, обновление или управление лабораторией). Если я правильно понимаю, вы бы хотели легко настроить определение сборки, которое построит одно и то же решение, но из другой ветки.
Одна вещь, которую вы могли бы попробовать вместо копирования определения, - это отредактировать ее. Когда ветка умирает, переименуйте определение сборки (может помочь с отчетами), измените отображение рабочей области сборки, и вы должны сделать.
Спасибо, Ладислоу