2014-02-17 3 views
1

TFS2012 с одним контроллером сборки 2010 года с одним агентом сборки 2010 года. Также есть один контроллер сборки 2012 года с несколькими агентами сборки 2012 года.Queuing 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)) 
     } 
    } 
} 

Edit: убрана $buildDefinitions = $buildServer.QueryBuildDefinitions("FooProject").Name, заменил его $buildServer.QueryBuildDefinitions("FooProject") | foreach...

сборки теперь очередь программно.

ответ

1

API не изменился, и я полагаю, что оба агента используют одну и ту же учетную запись. .

Линия

$ buildDefinitions = $ buildServer.QueryBuildDefinitions ("FooProject") Название

кажется неправильным: Имя свойство прибудет сгенерирует исключение для пустого результата.

+0

Я обновил запрос - не повлиял на результат сценария. Нет сборки в очереди, когда сценарий PowerShell выполняется как часть сгенерированной/поставленной в очередь сборки. – Alicia

+0

На самом деле это сработало :) – Alicia

Смежные вопросы