2013-10-17 8 views
5

Ich möchte in TFS 2013 eine spezielle Builddefinition erstellen, um aus dem Tag zu erstellen. Die in diesem Projekt verwendete Quellcodeverwaltung ist Git.Wie wird TFS 2013-Builddefinition zum Erstellen von Git-Tags eingerichtet?

Also, sagen wir mal, ich habe ein Tag namens v1.0. Ich möchte, dass diese Builddefinition die Quellen zieht, die diesem Tag entsprechen, und einen Build ausführen. Auslöser spielen keine Rolle - es könnte sogar manuell sein. Wie ist das möglich?

ich sehen kann man nur eine Option zum Zweig auf der Registerkarte Quelle Einstellungen zu wählen ...

Betrachten Sie das erweiterte Szenario: ein Build ausgelöst wird, wenn ein neuer Tag erstellt wird, und nimmt die Quellen von dieser neu Erstelltes Tag, um einen Build auszuführen. Ist das möglich? Wenn das so ist, wie?

Ich konnte keine Informationen neben einfachen Standard-Szenarien auf MSDN erläutert finden. Wahrscheinlich, weil die Konfiguration (TFS 2013 im Git-Modus) ziemlich neu ist ...

Vielen Dank im Voraus.

Antwort

12

Ich habe einige Untersuchungen durchgeführt und spielte mit dem, was TFS standardmäßig anbietet. Um ehrlich zu sein, deckt es ziemlich genau das von mir beschriebene Basisszenario ab.

Die Standard-Build-Vorlage für Git enthält ein Build Argument Checkout override genannt:

enter image description here

aus diesem Feld akzeptiert entweder Tag-Namen, oder einfach ID der Revision Sie möchten, dass bauen:

enter image description here

Die gute Sache hier ist, dass diese Einstellung überschreibt (wie der Name schon sagt :)) den Standardzweig. Ich meine, wenn Sie ein Tag aus Master-Zweig erstellt, aber einen anderen Zweig auf der Registerkarte Quelle der Build-Definition angegeben, ist es egal - die Checkout override bevorzugt.

Ich werde versuchen, das erweiterte Szenario zu untersuchen (in meiner Frage beschrieben). Ich nehme an, dass es eine Menge benutzerdefinierten Codes geben wird ... wird das Update hier veröffentlichen.

UPDATE DEC 23, 2013 Wie erwartet, ist ein benutzerdefinierter Code erforderlich, um das zu erstellende Tag auswählen zu können. Am Ende habe ich einen benutzerdefinierten Editor erstellt und ihn dem Feld Checkout override zugewiesen. Daher gibt es keine Option, eine Revisions-ID dort einzufügen, sondern nur ein Tag aus der Liste auszuwählen - aber das ist für meinen Fall in Ordnung.

Zuerst sollten Sie also einen benutzerdefinierten Editor für ein Feld erstellen. Erstellen Sie im Grunde eine Klasse, erben Sie sie von System.Drawing.Design.UITypeEditor Klasse und überschreiben Sie ein paar Methoden. This walkthrough hat sehr geholfen, ebenso wie this book (Kapitel 18 "Anpassen des Build-Prozesses").

Der nützliche Code, der die Liste der Tags aus einem bestimmten Git Repo eines bestimmten TFS Team-Projekt bekommt, ist hier:

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>(); 
} 

Die DLL mit dem benutzerdefinierten Editor muss VS sichtbar gemacht werden (in meinem Fall Ich habe die Baugruppe einfach in den Ordner Common7\IDE\PrivateAssemblies\ meiner VS-Installation gelegt.Dann im Bereich Metadaten-Editor Sie den benutzerdefinierten Editor für das gewünschte Feld angeben sollen:

enter image description here

Und jetzt, wenn wir die Builddefinition bearbeiten oder einen neue Build Warteschlange, können wir den notwendigen Tag aus der Auswahl Drop-Down-:

enter image description here

Hope this Sie einige Zeit spart.

+1

Würde es Ihnen etwas ausmachen, dieses Snippet zu den ALM Rangers Build Community Extensions beizutragen? http://tfsbuildextensions.codeplex.com/ – jessehouwing

+0

Das ist eine gute Idee. Könnten Sie bitte auf den genauen Ort hinweisen, in den es passt? –

+0

Ich habe das Ranger-Team benachrichtigt, das dies aufrechterhält. Wenn Sie die "Upload-Patch" -Funktion nutzen könnten, um eine Zip-Datei mit den Quellen hochzuladen, denke ich, dass ich den Prozess in Bewegung setzen kann, um sie mit einzubeziehen ... http://tfsbuildextensions.codeplex.com/SourceControl/latest – jessehouwing

Verwandte Themen