[英]How to get TFS build steps with the REST api?
我目前正在為我正在研究的實驗室模塊AutomatedLab自動化TFS / VSTS。 到目前為止,我的進度很好。 對REST API的所有調用都是在PowerShell中使用Invoke-RestMethod完成的。
我沒有弄清楚的一件事是:如何獲得可以在構建中使用的構建步驟列表? API文檔( https://www.visualstudio.com/zh-cn/docs/integrate/api/overview )沒有任何幫助我的東西。 我也沒有在StackOverflow上找到與我的問題有關的任何內容(假設我使用了正確的搜索詞)。
雖然可以添加新的構建定義,但是我無法弄清楚如何正確添加構建步驟,例如運行腳本,發布測試結果等。
到目前為止,我的研究:
上述URL的構建步驟包含我需要的所有信息
enabled : True continueOnError : False alwaysRun : False displayName : PowerShell Script timeoutInMinutes : 0 task : @{id=e213ff0f-5d5c-4791-802d-52ea3e7be1f1; versionSpec=*; definitionType=task} inputs : @{scriptType=filePath; scriptName=initiate.ps1; arguments=-filename build; workingFolder=; failOnStandardError=true} enabled : True continueOnError : False alwaysRun : False displayName : Publish Test Results **/TEST-*.xml timeoutInMinutes : 0 task : @{id=0b0f01ed-7dde-43ff-9cbb-e48954daf9b1; versionSpec=*; definitionType=task} inputs : @{testRunner=NUnit; testResultsFiles=**/TEST-*.xml; mergeTestResults=false; testRunTitle=; platform=; configuration=; publishRunAttachments=true} enabled : True continueOnError : False alwaysRun : False displayName : Copy Publish Artifact: Deploy timeoutInMinutes : 0 task : @{id=1d341bb0-2106-458c-8422-d00bcea6512a; versionSpec=*; definitionType=task} inputs : @{CopyRoot=$(Build.ArtifactStagingDirectory)\\; Contents=initiate.ps1 **\\deploy.ps1 **\\Acceptance\\** **\\Integration\\**; ArtifactName=Deploy; ArtifactType=Container; TargetPath=\\\\my\\share\\$(Build.DefinitionName)\\$(Build.BuildNumber)}
為什么我需要那些任務向導? 要創建新的構建定義, 請參見https://www.visualstudio.com/zh-cn/docs/integrate/api/build/definitions#create-a-build-definition
我的代碼如下所示,並且我沒有插入1-n構建步驟的正確自動化方法:
function New-TfsBuildDefinition
{
[CmdletBinding(DefaultParameterSetName = 'Cred')]
param
(
[Parameter(Mandatory)]
[string]
$InstanceName,
[Parameter(Mandatory)]
[string]
$CollectionName,
[ValidateRange(1, 65535)]
[uint32]
$Port,
[ValidateSet('1.0', '2.0')]
[Version]
$ApiVersion = '2.0',
[Parameter(Mandatory)]
[string]
$ProjectName,
[Parameter(Mandatory)]
[string]
$DefinitionName,
[string]
$QueueName,
[switch]
$UseSsl,
[Parameter(Mandatory, ParameterSetName = 'Cred')]
[pscredential]
$Credential,
[Parameter(Mandatory, ParameterSetName = 'Pat')]
[string]
$UserName,
[Parameter(Mandatory, ParameterSetName = 'Pat')]
[string]
$PersonalAccessToken
)
$requestUrl = if ($UseSsl) {'https://' } else {'http://'}
$requestUrl += '{0}/{1}/_apis/build/definitions?api-version={2}' -f $InstanceName, $CollectionName, $ApiVersion.ToString(2)
if ( $Port )
{
$requestUrl += '{0}{1}/{2}/_apis/build/definitions?api-version={3}' -f $InstanceName, ":$Port", $CollectionName, $ApiVersion.ToString(2)
}
if ( $QueueName )
{
$parameters = Sync-Parameter -Command (Get-Command Get-TfsAgentQueue) -Parameters $PSBoundParameters
$parameters.Remove('ApiVersion') # preview-API is called
$queue = Get-TfsAgentQueue @parameters
if (-not $queue)
{
$parameters = Sync-Parameter -Command (Get-Command New-TfsAgentQueue) -Parameters $PSBoundParameters
$parameters.Remove('ApiVersion') # preview-API is called
New-TfsAgentQueue @parameters
}
}
else
{
$queue = Get-TfsAgentQueue | Select-Object -First 1
}
$buildDefinition = @{
"name" = $DefinitionName
"type" = "build"
"quality" = "definition"
"queue" = @{
"id" = $queue.id
}
"build" = @(
# ABBREVIATED! I WOULD LIKE TO
# ADD MY BUILD STEPS HERE LIKE I AM DOING
# MANUALLY
)
}
}
沒有記錄; 但它在那里!
https://<foo>.visualstudio.com/_apis/distributedtask/tasks?visibility%5B%5D=Build
不要忘記,您可以使用Chrome開發者工具之類的工具查看正在發出的請求;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.