[英]Queueing TFS builds via PowerShell
具有一個2010構建控制器和一個2010構建代理的TFS2012。 還具有一個帶有多個2012構建代理的2012構建控制器。
我們為軟件的多個版本提供了多個版本。 這些構建按照約定命名,例如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...
$buildServer.QueryBuildDefinitions("FooProject") | foreach...
現在,以編程方式對構建進行排隊。
API尚未更改,我想兩個代理都使用相同的帳戶。
線
$ buildDefinitions = $ buildServer.QueryBuildDefinitions(“ FooProject”)。Name
似乎錯了:Name屬性的get將引發一個空結果的異常。
您還可以利用內置的API之一來防止下載dll二進制文件。
以下適用於
TFS 2017:
https://github.com/sameer-kumar/adhoc-posh/blob/master/QueueTfsBuild.ps1
$rootTfsUri = "http://myTFS:8080/tfs"
$collectionName = "Default"
$projectName = "Project1"
$tfsUri = $rootTfsUri + "/" + $collectionName + "/" + $projectName
$buildDefinition = "DevCI-vnext"
$buildDefinitionUri = "$tfsUri/_apis/build/definitions?api-version=3.1&name=$buildDefinition"
# first get build definition id
$buildResponse = Invoke-WebRequest -Uri $buildDefinitionUri -UseDefaultCredentials -Method Get -Verbose -UseBasicParsing -ContentType "application/json"
$buildResponseAsJson = $buildResponse.Content | convertfrom-json
$buildDefinitionId = $buildResponseAsJson.value.id
# Now queue this build definition
$requestContentString = @"
{
"definition": {
"id" : "$buildDefinitionId"
}
}
"@
$buildUri = "$tfsUri/_apis/build/builds?api-version=3.1"
$buildResponse = Invoke-WebRequest -Uri $buildUri -UseDefaultCredentials -Method Post -Verbose -UseBasicParsing -ContentType "application/json" -Body $requestContentString
$buildNumber = ($buildResponse.Content | ConvertFrom-Json).buildNumber
TFS 2015
使用稍微不同的結構,其中uri定義被替換為
$buildDefinitionUri = "$tfsUri/_apis/Build/builds?api-version=2.0&name=$buildDefinition"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.