2012-06-04 33 views
1

如何從TFS生成定義,並把它傳遞給外部程序如何從TFS獲得構建定義,並把它傳遞給外部程序

這是我們手工做的:

1)隊列新建 2)一旦建設完成後轉到投遞文件夾,並得到該exe名稱 3)通過這個exe文件名自動測試程序並運行it.`

我想自動化這些3個步驟。 是否有可能以編程方式獲取構建定義?

+0

什麼版本的TFS? – TimWagaman

+0

另外你的測試工具可能也有幫助。如果您使用nUnit,那麼我可能會得到與使用Tekerik的測試工具不同的答案... – TimWagaman

+0

TFS 2010.我們有一個存根程序,它調用exe,所以測試工具在這裏不相關。我想知道是否有可能在TFS中提交隊列新構建時以prgramatically方式獲取構建工件。如果可能的話,我會將這段代碼插入到我的存根程序中。 – Kumar

回答

1

創建自定義生成模板。使用默認的副本(或者你現在使用的任何東西)作爲你的出發點。查看BuildDetail.CompilationStatus = BuildPhaseStatus.Succeeded的工作流程。您將有機會調用另一個應用程序,它將是一個存根程序/ powershell腳本/任何其他可執行程序。您可以使用BuildDetail.DropLocation傳遞剛完成的構建路徑。

0
<MakeDir Directories="$(TemporaryFolder)" /> 
    <Exec Condition=" '$(IsInTeamBuild)'=='True'" Command="&quot;$(TfsTask)&quot; history ../ /r /noprompt /stopafter:1 /version:W > &quot;$(TemporaryFolder)\grab-changeset.txt&quot;" /> 
    <Exec Condition=" '$(IsInTeamBuild)'=='True'" Command="&quot;$(TfsTask)&quot; properties &quot;$(MyMSBuildStartupDirectory)\all-companies-run-after-update.js&quot; > &quot;$(TemporaryFolder)\grab-properties.txt&quot;" /> 

我們用上面的提取:從生成的.txt文件建立#,分支,修訂# 。

1

假設你已經執行了第1步,這個最新(成功!)構建可以作爲特定構建定義的lastKnownGoodBuild到達。
考慮到這一點,你可以使用該按以下基準控制檯應用程序:

using System; 
using System.IO; 
using Microsoft.TeamFoundation.Build.Client; 
using Microsoft.TeamFoundation.Client; 

namespace BuildDropLocation 
{ 
    class Program 
    { 
     static void Main() 
     { 
      TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://yourTFSServerUri")); 

      var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer)); 

      IBuildDefinition myBuildDefinition = buildService.GetBuildDefinition("TeamProjectName", "BuildDefinitionName"); 
      Uri lastKnownGoodBuild = myBuildDefinition.LastGoodBuildUri; 
      IBuildDetail myBuildDetail = buildService.GetBuild(lastKnownGoodBuild); 
      string[] myExeFiles = Directory.GetFiles(myBuildDetail.DropLocation, "*.exe",SearchOption.AllDirectories); 

      foreach (var exeFile in myExeFiles) 
      { 
       Console.WriteLine(myExeFile); 
      }  
     } 
    } 
} 


有了上面可以構建定義BuildDefinitionName的最後構建的放置位置下檢索路徑的任何*.exe那住在團隊項目TeamProjectName

這種方法可以讓你完全分離你的TFS-Build和執行測試。例如,您可以安排此控制檯應用程序每天晚上執行,並調用跑步者以最新的成功構建進行操作。

如果您希望構建和testrun以任何方式耦合,您應該按照@TimWagaman的建議在構建過程中調用測試運行器。這種「耦合」可能包括:

  • 測試結果包含在構建日誌
  • 故障產生的一個Bug
  • 測試覆蓋率報告

在這種情況下,你的測試將在編譯階段沒有中斷的每個構建中執行。

相關問題