2014-02-17 5 views
1

하나의 2010 빌드 컨트롤러와 하나의 2010 빌드 에이전트가있는 TFS2012. 또한 여러 2012 빌드 에이전트가있는 2012 빌드 컨트롤러 한 대를 보유하십시오.Queuing PowerShell을 통한 TFS 빌드

우리 소프트웨어의 여러 버전에 대해 여러 빌드가 있습니다. 빌드는 규칙에 따라 명명됩니다. 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") 라인은 잘못된 것 같습니다 : 이름 속성의 get은 빈 결과에 대한 예외를 발생합니다.

+0

나는 쿼리를 업데이트 했으므로 스크립트 결과에 영향을 미치지 않았다. PowerShell 스크립트가 트리거 된/대기중인 빌드의 일부로 실행될 때 대기하는 빌드가 없습니다. – Alicia

+0

사실, 그것은 작동 :) – Alicia