2013-10-17 19 views
5

Voglio creare una definizione di build speciale in TFS 2013 per creare dal tag. Il controllo del codice sorgente utilizzato in quel progetto è Git.Come configurare la definizione di build TFS 2013 per creare da tag Git?

Quindi, supponiamo di avere un tag chiamato v1.0. Voglio che questa definizione build estragga i sorgenti corrispondenti a quel tag ed esegua una build. I trigger non contano per ora - potrebbe essere perfino manuale. Come è possibile?

Vedo che hai solo la possibilità di scegliere ramo sulla scheda Impostazioni origine ...

Si consideri lo scenario avanzato: una build si attiva quando viene creato un nuovo tag, e prende le fonti da cui di recente tag creato per eseguire una build. È possibile? Se é cosi, come?

Non sono riuscito a trovare alcuna informazione oltre a semplici scenari di default spiegati su MSDN. Probabilmente, perché la configurazione (TFS 2013 in modalità Git) è abbastanza nuova ...

Grazie in anticipo.

risposta

12

Ho svolto alcune ricerche e ho giocato con ciò che offre TFS di default. Per essere onesti, copre praticamente lo scenario base che ho descritto.

Il modello di generazione di default per Git contiene un argomento di compilazione chiamato Checkout override:

enter image description here

Questo campo accetta sia nome del tag, o semplicemente ID della revisione che desideri costruire da:

enter image description here

La cosa buona è che questa impostazione ha la precedenza (proprio come suggerisce il nome :)) il ramo predefinito. Voglio dire, se hai creato un tag dal ramo principale, ma hai specificato un altro ramo nella scheda Origine della definizione di build, non importa: il Checkout override ha la preferenza.

Proverò a indagare sullo scenario avanzato (descritto nella mia domanda). Suppongo che ci sarà una certa quantità di codice personalizzato ... pubblicheremo l'aggiornamento qui.

UPDATE 23 DIC 2013 Come previsto, per poter scegliere il tag da cui creare, è necessario un codice personalizzato. Ho finito per creare un editor personalizzato e assegnarlo al campo Checkout override. Di conseguenza, non c'è alcuna possibilità di incollare alcun id di revisione lì, solo scegliere un tag dall'elenco - ma per il mio caso va bene.

Quindi, per prima cosa è necessario creare un editor personalizzato per un campo. Fondamentalmente, creare una classe, ereditarla dalla classe System.Drawing.Design.UITypeEditor e sovrascrivere un paio di metodi. This walkthrough ha aiutato molto, nonché this book (capitolo 18 "Personalizzazione del processo di creazione").

Il codice utile che ottiene l'elenco dei tag da una specifica repo Git di uno specifico progetto di squadra TFS è qui:

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 l'editor personalizzato deve essere reso visibile a VS (nel mio caso , Ho appena messo il gruppo nella cartella Common7\IDE\PrivateAssemblies\ della mia installazione VS).Poi, nel editor di campo di metadati è necessario specificare l'editor personalizzato per il campo desiderato:

enter image description here

E ora se modificare la definizione di compilazione, o coda di una nuova build, siamo in grado di selezionare l'etichetta necessaria dalla discesa:

enter image description here

Spero che questo ti consente di risparmiare un po 'di tempo.

+1

ti dispiacerebbe contribuire con questo frammento agli ALM Rangers Build Community Extensions? http://tfsbuildextensions.codeplex.com/ – jessehouwing

+0

Questa è una buona idea. Potresti per favore indicare la posizione esatta in cui si inserisce? –

+0

Ho avvisato il team Ranger che lo sta mantenendo. Se si potesse usare la funzione "Carica patch" per caricare un file zip con i sorgenti, penso di poter impostare il processo in movimento per averli inclusi ... http://tfsbuildextensions.codeplex.com/SourceControl/latest – jessehouwing

Problemi correlati