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...
構建正在排隊程序取代了它。
我已更新查詢 - 對腳本的結果沒有影響。當PowerShell腳本作爲觸發/排隊構建的一部分執行時,沒有構建排隊。 – Alicia
其實,它工作:) – Alicia