如何從TFS生成定義,並把它傳遞給外部程序如何從TFS獲得構建定義,並把它傳遞給外部程序
這是我們手工做的:
1)隊列新建 2)一旦建設完成後轉到投遞文件夾,並得到該exe名稱 3)通過這個exe文件名自動測試程序並運行it.`
我想自動化這些3個步驟。 是否有可能以編程方式獲取構建定義?
如何從TFS生成定義,並把它傳遞給外部程序如何從TFS獲得構建定義,並把它傳遞給外部程序
這是我們手工做的:
1)隊列新建 2)一旦建設完成後轉到投遞文件夾,並得到該exe名稱 3)通過這個exe文件名自動測試程序並運行it.`
我想自動化這些3個步驟。 是否有可能以編程方式獲取構建定義?
創建自定義生成模板。使用默認的副本(或者你現在使用的任何東西)作爲你的出發點。查看BuildDetail.CompilationStatus = BuildPhaseStatus.Succeeded的工作流程。您將有機會調用另一個應用程序,它將是一個存根程序/ powershell腳本/任何其他可執行程序。您可以使用BuildDetail.DropLocation傳遞剛完成的構建路徑。
<MakeDir Directories="$(TemporaryFolder)" />
<Exec Condition=" '$(IsInTeamBuild)'=='True'" Command=""$(TfsTask)" history ../ /r /noprompt /stopafter:1 /version:W > "$(TemporaryFolder)\grab-changeset.txt"" />
<Exec Condition=" '$(IsInTeamBuild)'=='True'" Command=""$(TfsTask)" properties "$(MyMSBuildStartupDirectory)\all-companies-run-after-update.js" > "$(TemporaryFolder)\grab-properties.txt"" />
我們用上面的提取:從生成的.txt文件建立#,分支,修訂# 。
假設你已經執行了第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的建議在構建過程中調用測試運行器。這種「耦合」可能包括:
在這種情況下,你的測試將在編譯階段沒有中斷的每個構建中執行。
什麼版本的TFS? – TimWagaman
另外你的測試工具可能也有幫助。如果您使用nUnit,那麼我可能會得到與使用Tekerik的測試工具不同的答案... – TimWagaman
TFS 2010.我們有一個存根程序,它調用exe,所以測試工具在這裏不相關。我想知道是否有可能在TFS中提交隊列新構建時以prgramatically方式獲取構建工件。如果可能的話,我會將這段代碼插入到我的存根程序中。 – Kumar