¿Cómo puedo copiar una Definición de Compilación de TFS 2010?


¿Hay alguna manera de copiar una definición de compilación? Trabajo en una metodología de control de código fuente de línea principal que utiliza muchas ramas diferentes que viven por períodos muy cortos (es decir. algunos días a una semana). Realmente me gustaría copiar una plantilla de compilación y simplemente cambiar la solución para compilar. ¿Hay alguna manera de hacer esto?

Author: devlife, 2010-05-26

7 answers

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;
}
 12
Author: Jim Lamb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-09 15:02:56

Puede descargar el nuevo TFS 2010 power tools. Tiene la opción de clonar una definición de compilación.

Véase http://msmvps.com/blogs/molausson/archive/2010/10/21/clone-a-build-definition.aspx para un ejemplo

Nota: Tenga en cuenta que el Clon solo funciona cuando NO aparece la ventana de compilación.

 36
Author: Ewald Hofman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-21 05:57:42

La siguiente herramienta (VS Addin) satisfará su requisito >

Community TFS Build Manager

Http://visualstudiogallery.msdn.microsoft.com/16bafc63-0f20-4cc3-8b67-4e25d150102c

 2
Author: ansariwn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-02 10:54:09

Acabo de tener la necesidad de copiar las definiciones de compilación, y encontré que la respuesta de Jim anterior era ú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 vínculos ayudaron a llenar los vacíos:

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

 1
Author: dan9298,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-03 18:16:43

Puede hacer clic derecho en la definición de compilación y seleccionar 'clonar definición de compilación' para copiar el archivo de definición. A continuación, puede editarlo desde allí.

 1
Author: dah97765,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-12 15:25:26

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 

    }
 1
Author: md Jawed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-09 13:34:32

Desde su mensaje no está claro qué plantilla es su definición de compilación utilizando (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ía intentar en lugar de copiar la definición es editarla. Cuando la rama muera, cambie el nombre de la definición de compilación (podría ayudar con los informes), cambie la asignación del espacio de trabajo de la compilación y debería ser Terminado.

Gracias, Ladislau

 0
Author: Ladislau Szomoru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-26 19:26:59