2011-06-08 45 views
2

爲了檢索哪些Changeset包含在哪個Build中的信息,我們使用Team Foundation Sidekicks的「Label Sidekick」,我們在其中放置Label建立&期望找到新建的Changeset。TFS 2010問題與跟蹤門控Checkins的結果中的變更集

我們在TFS 2010開發過程中正在使用的「門控」的籤,所以我們面臨的最新簽入未在插袋中出現的問題(我們實際收到以前構建的變更)。這是可以解釋的,因爲在標籤發生時,最新的變化尚未提交。

BuildLog會正確報告關聯的Changeset。

我在我們的構建過程模板中做了幾個實驗,但似乎無法得到我們需要的東西。 例如,將標籤活動放在「Run On Agent」作用域之外,導致我的構建在一開始就失敗了,「對象引用未設置爲對象的實例」。 (我想這與事實有關,我不得不擴大'Label'&'Workspace'變量的範圍以使第二部分運行)。
此嘗試的構建過程模板的'before'狀態爲here(此作品),'after'狀態(「Object ref not set ..」)爲here

因此,要總結,兩種不同類型的輸入可以幫助我:

我應該如何改變我們的生成過程模板,以便標籤發生後門控簽入一直致力於? ( - 這將理順插袋顯示)

我如何編程方式檢索的每個構建相關的變更集? ( - 這會讓我寫一個小應用程序,可以過時Sidekicks角度)

回答

3

您可以使用TFS API來完成此操作。

 public static void GetBuild() 
    { 
     var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://tfsdevlonuk:8080/tfs/gazprom.mt"), new UICredentialsProvider()); 
     tfs.EnsureAuthenticated(); 
     var buildServer = tfs.GetService<IBuildServer>(); 

     // Get Project Name 
     var versionControl = tfs.GetService<VersionControlServer>(); 
     var teamProjects = versionControl.GetAllTeamProjects(true); 

     // Get Builds for a team project 
     var buildDetails = buildServer.QueryBuilds(teamProjects[0].Name); 

     // For each build 
     foreach (IBuildDetail buildDetail in buildDetails) 
     { 
      // Get the build details 
      var buildInfor = buildDetail.Information; 

      // More build infor like shelveset, etc 
      Debug.Write(buildDetail.LabelName + buildDetail.ShelvesetName); 

     } 

上述代碼將幫助您以編程方式獲取構建細節。我有一些關於如何以編程方式連接到tfs並使用tfs api的博客帖子。 http://geekswithblogs.net/TarunArora/archive/2011/06/18/tfs-2010-sdk-connecting-to-tfs-2010-programmaticallyndashpart-1.aspx

+0

嗨塔倫&感謝您的意見。我想了很多關於如何解決這種情況,我將使用你的零件作爲自定義構建活動的起點,將這些信息放置在Excel工作表上。然後另一個控制檯應用程序(執行一段時間後執行)將讀取此Excel表單並調整標籤。 – pantelif 2011-07-13 09:20:59

+0

這樣我就可以得到(1)Excel工作表,告訴我哪些構建隨着我所有構建的變化集合而變化(2)每當我需要時,在Sidekicks中進行合理的顯示。 – pantelif 2011-07-13 09:22:37

+0

這聽起來像一個很好的開始隊友。 – 2011-07-13 10:05:55