하나의 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...
지금 프로그래밍 대기중인 빌드로 대체.
나는 쿼리를 업데이트 했으므로 스크립트 결과에 영향을 미치지 않았다. PowerShell 스크립트가 트리거 된/대기중인 빌드의 일부로 실행될 때 대기하는 빌드가 없습니다. – Alicia
사실, 그것은 작동 :) – Alicia