tfs - new - team foundation server add project
¿Cómo puedo copiar una definición de compilación de TFS 2010? (7)
Aquí está la solución si desea mover la definición de compilación de un proyecto de equipo a otro proyecto de equipo.
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
}
¿Hay alguna forma de copiar una definición de construcción? Trabajo en una metodología de control de fuente principal que utiliza muchas ramas diferentes que viven durante períodos muy cortos (es decir, unos pocos días a una semana). Realmente me gustaría copiar una plantilla de construcción y simplemente cambiar la solución para construir. ¿Hay alguna manera de hacer esto?
De su mensaje no está claro qué plantilla está usando su definición de compilación (por defecto, actualización o administración de laboratorio). Si entiendo correctamente, le gustaría configurar fácilmente una definición de compilación que construya la misma solución pero desde una rama diferente.
Una cosa que podrías intentar en lugar de copiar la definición es editarla. Cuando la ramificación muere, cambie el nombre de la definición de compilación (podría ayudar con la generación de informes), cambie la asignación del área de trabajo de la compilación y debe hacerlo.
Gracias, Ladislau
La siguiente herramienta (complemento VS) satisfará sus requisitos>
Community TFS Build Manager
http://visualstudiogallery.msdn.microsoft.com/16bafc63-0f20-4cc3-8b67-4e25d150102c
Puede descargar las nuevas herramientas eléctricas de TFS 2010 . Tiene la opción de clonar una definición de construcción.
Ver http://msmvps.com/blogs/molausson/archive/2010/10/21/clone-a-build-definition.aspx para ver un ejemplo
Nota: Tenga en cuenta que el clon solo funciona cuando NO salió de la ventana Generar.
Puede escribir un complemento para hacerlo. Aquí está el código para copiar una definición de compilación existente:
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;
}
Puede hacer clic con el botón derecho en la definición de compilación y seleccionar ''definición de clonación'' para copiar el archivo de definición. Luego puede editarlo desde allí.
Solo tuve que copiar las definiciones de compilación, y encontré que la respuesta de Jim anterior es útil. Sin embargo, al ser nuevo en la API de TFS, necesitaba ayuda para conectarme al servidor y obtener la definición de compilación existente a través del código. Estos dos enlaces ayudaron a llenar los vacíos: