team software instalar como git tfs tfsbuild git-tag tfs2013

software - ¿Cómo configurar la definición de compilación de TFS 2013 para construir desde la etiqueta de Git?



tfs 2018 software requirements (1)

Quiero crear una definición de compilación especial en TFS 2013 para compilar a partir de la etiqueta. El control de fuente utilizado en ese proyecto es Git.

Entonces, digamos que tengo una etiqueta llamada v1.0 . Quiero que esta definición de compilación extraiga las fuentes correspondientes a esa etiqueta y ejecute una compilación. Los desencadenantes no importan por ahora, podría ser incluso manual. ¿Cómo es eso posible?

Veo que solo tiene una opción para elegir la rama en la pestaña Configuración de fuente ...

Considere el escenario avanzado: una compilación se activa cuando se crea una nueva etiqueta y toma las fuentes de esa etiqueta recién creada para ejecutar una compilación. ¿Es eso posible? ¿Si es así, cómo?

No pude encontrar información adicional a los escenarios predeterminados simples explicados en MSDN. Probablemente, porque la configuración (TFS 2013 en modo Git) es bastante nueva ...

Gracias por adelantado.


Hice algunas investigaciones y jugué con lo que TFS ofrece por defecto. Para ser honesto, cubre el escenario básico que describí.

La plantilla de compilación predeterminada para Git contiene un argumento de compilación llamado Checkout override :

Este campo acepta el nombre de la etiqueta o simplemente la ID de la revisión desde la que desea crear:

Lo bueno aquí es que esta configuración anula (al igual que el nombre sugiere :)) la rama predeterminada. Quiero decir, si creó una etiqueta desde la rama principal, pero especificó otra rama en la pestaña Fuente de la definición de compilación, no importa; la Checkout override tiene preferencia.

Trataré de investigar el escenario avanzado (descrito en mi pregunta). Supongo que habrá una cierta cantidad de código personalizado ... publicará la actualización aquí.

ACTUALIZACIÓN 23 DE DICIEMBRE DE 2013 Como era de esperar, para poder elegir la etiqueta desde la que construir, se requiere un código personalizado. Terminé creando un editor personalizado y asignándolo al campo Checkout override comprobación. Como resultado, no hay ninguna opción para pegar ningún ID de revisión allí, solo elegir una etiqueta de la lista, pero eso está bien para mi caso.

Entonces, primero debes crear un editor personalizado para un campo. Básicamente, crea una clase, System.Drawing.Design.UITypeEditor clase System.Drawing.Design.UITypeEditor y anula un par de métodos. Este tutorial ayudó mucho, al igual que este libro (Capítulo 18 "Personalización del proceso de compilación").

El código útil que obtiene la lista de etiquetas de un repositorio de Git específico de un proyecto de equipo de TFS específico está aquí:

private List<string> GetAvailableTags(IServiceProvider provider) { // obtain the current build definition object var buildDefinition = (IBuildDefinition)provider.GetService(typeof(IBuildDefinition)); // obtain the current source provider for the build definition (Git or TFVC) var sourceProvider = buildDefinition.GetDefaultSourceProvider(); // obtain the project collection var teamProjectCollection = buildDefinition.BuildServer.TeamProjectCollection; // obtain a service object to communicate with Git repo var gitRepoService = teamProjectCollection.GetService<GitRepositoryService>(); // this will get the partial URL of the Git repo (in a form <teamproject>/<repo>) var repoUrl = sourceProvider.Fields[BuildSourceProviders.GitProperties.RepositoryName]; string projectName; string repoName; // this is the way to parse the partial URL obtained above, into project name and repo name if (BuildSourceProviders.GitProperties.ParseUniqueRepoName(repoUrl, out projectName, out repoName)) { // this will get all Git repos of the current team project var source = gitRepoService.QueryRepositories(projectName); // this will take the current Git repo we work with var repo = source.First(x => x.Name.Equals(repoName, StringComparison.OrdinalIgnoreCase)); // this will get all the tags in this Git repo var tags = gitRepoService.QueryRefs(repo.Id, "tags"); // and finally, the list of pure tag names is returned return tags.Select(gitRef => gitRef.Name.Substring("refs/tags/".Length)).ToList(); } return new List<string>(); }

La DLL con el editor personalizado debe hacerse visible para VS (en mi caso, simplemente coloque el ensamblado en la Common7/IDE/PrivateAssemblies/ de mi instalación VS). Luego, en el editor de metadatos de campo, debe especificar el editor personalizado para el campo deseado:

Y ahora, si editamos la definición de compilación o ponemos en cola una compilación nueva, podemos seleccionar la etiqueta necesaria del menú desplegable:

Espero que esto te ahorre algo de tiempo.