2014-02-17 49 views
1

TFS2012與一個2010構建控制器和一個2010構建代理。還有一個具有多個2012構建代理的2012構建控制器。隊列TFS通過PowerShell生成

我們有多個版本的軟件的多個版本。構建根據慣例命名,例如Foo_version_1_0和Foo_version_2_0。

當我在本地機器上運行此代碼時,所有構建都排隊。當我在2012版構建代理上手動運行此代碼時,構建將排隊。當我在2010構建代理上手動運行此代碼時,沒有構建排隊。當代碼作爲TFS中觸發構建的一部分執行時(無論是2010年還是2012年的控制器/代理),它都不會將任何構建和錯誤排隊,並且我的自定義異常表明沒有從TFS返回的定義。

我的問題:

是在$ buildServer.QueryBuildDefinitions()函數只有管理員功能?即如果非管理用戶帳戶(如TFSService)運行它,它將無法從TFS api獲取數據?

$ buildServer.QueryBuildDefinitions()是一個僅在2012年可用的新函數嗎?

是否有另外一種方法可以做到這一點?之前,我們將所有內部版本的名稱進行了硬編碼 - 這對我們來說不是一個可行的方法。

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") 

$serverName="http://tfs:8080/tfs" 
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) 
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer]) 

$buildServer.QueryBuildDefinitions("FooProject") | foreach { 
if ($_.EndsWith("version_1_0")) 
{ 
echo "Queueing build: $_.Name" 
$buildServer.QueueBuild($buildServer.GetBuildDefinition("FooProject",$_.Name)) 
     } 
    } 
} 

編輯:刪除$buildDefinitions = $buildServer.QueryBuildDefinitions("FooProject").Name,與$buildServer.QueryBuildDefinitions("FooProject") | foreach...

構建正在排隊程序取代了它。

回答

1

API沒有改變,我想這兩個代理使用相同的帳戶。 。

$ buildDefinitions = $ buildServer.QueryBuildDefinitions( 「FooProject」)命名

似乎是錯誤的:Name屬性get會引發異常的空的結果。

+0

我已更新查詢 - 對腳本的結果沒有影響。當PowerShell腳本作爲觸發/排隊構建的一部分執行時,沒有構建排隊。 – Alicia

+0

其實,它工作:) – Alicia