2013-10-17 18 views
5

TFS 2013'te etiket oluşturmak için özel bir yapı tanımı oluşturmak istiyorum. Bu projede kullanılan kaynak kontrol Git'dir.TFS 2013, Git etiketinden derleme yapısı nasıl oluşturulur?

Yani, v1.0 adında bir etiketim olduğunu varsayalım. Bu derleme tanımının bu etikete karşılık gelen kaynakları çekip bir derleme çalıştırmasını istiyorum. Tetikleyiciler şimdilik önemli değil - manuel bile olabilir. Bu nasıl mümkün olabilir? Yeni bir etiket oluşturulduğunda bir yapı tetiklenir ve bu yeni gelen kaynaklar alır:

Ben sadece Kaynak Ayarlar sekmesinde dalı seçmek için bir seçenek var görebilirsiniz

...

gelişmiş senaryoyu düşünün bir yapıyı çalıştırmak için oluşturulmuş etiket. Mümkün mü? Öyleyse nasıl?

MSDN'de açıklanan düz varsayılan senaryoların yanı sıra herhangi bir bilgi bulamadım. Muhtemelen, çünkü yapılandırma (Git modunda TFS 2013) oldukça yeni ...

Şimdiden teşekkürler.

cevap

12

Bazı araştırmalar yaptım ve varsayılan olarak TFS'nin sunduğu şeylerle oynadım. Dürüst olmak gerekirse, tarif ettiğim temel senaryoyu oldukça kapsamaktadır.

Git varsayılan oluşturma şablonu bir yapı argüman Checkout override denilen içerir:

enter image description here

Bu alan gelen oluşturmak istiyorum etiket adı veya revizyonu basitçe kimliğini ya kabul eder:

enter image description here

Buradaki iyi şey, bu ayarın geçersiz kılınmasıdır (adından da anlaşılacağı gibi :)). Yani, ana daldan bir etiket oluşturduysanız ancak derleme tanımının Kaynak sekmesinde başka bir dal belirttiyseniz, önemli değil - Checkout override tercihi alır.

Gelişmiş senaryoyu araştırmaya çalışacağım (sorularımda açıklanmıştır). Sanırım bir miktar özel kod olacak ... güncellemeyi burada yayınlayacak.

UPDATE DEC 23, 2013 Beklendiği gibi, oluşturulacak etiketi seçebilmek için, bazı özel kodlar gereklidir. Özel bir düzenleyici oluşturup onu Checkout override alanına atadım. Sonuç olarak, orada herhangi bir düzeltme kimliğini yapıştırmak için bir seçenek yok, sadece listeden bir etiket seçin - ama bu benim durumum için sorun değil.

İlk olarak, bir alan için özel bir düzenleyici oluşturmanız gerekir. Temel olarak, bir sınıf oluşturun, System.Drawing.Design.UITypeEditor sınıfından miras alın ve birkaç yöntemi geçersiz kılın. This walkthrough, this book'un yanı sıra çok fazla yardımcı oldu (Bölüm 18 "Oluşturma İşlemini Özelleştirme").

belirli TFS takım projenin belirli Git repo etiketlerin listesini alır kullanışlı kod buradadır:

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

özel editörü ile DLL benim durumumda VS (görünür yapılmalıdır Kurulumunu VS kurulumumun Common7\IDE\PrivateAssemblies\ klasörüne koydum).Ardından, alan meta editörü özel istenilen alan için editör belirtmelidir: biz inşa tanımını düzenlemek veya yeni bir yapı sıraya eğer şimdi

enter image description here

Ve biz gerekli etiket seçebilirsiniz açılan: Bu işlem size zaman kazandırır

enter image description here

Umut.

+1

Bu snippet'i ALM Rangers Build Topluluk Uzantıları'na katkıda bulunmayı düşünür müsünüz? http://tfsbuildextensions.codeplex.com/ – jessehouwing

+0

Bu iyi bir fikir. Uygun bulunduğu yere işaret edebilir misiniz? –

+0

Bunu koruyan Ranger ekibini bilgilendirdim. Kaynaklarla bir zip dosyası yüklemek için "Yükleme Yaması" özelliğini kullanabildiysen, sanırım bunları dahil etmelerini sağlamak için işlemi başlatabilirim ... http://tfsbuildextensions.codeplex.com/SourceControl/latest – jessehouwing

İlgili konular