【发布时间】:2018-08-22 18:05:09
【问题描述】:
我目前正在为我正在处理的实验室模块 AutomatedLab 自动化 TFS/VSTS。到目前为止,我的进展非常顺利。对 REST API 的所有调用都在 PowerShell 中使用 Invoke-RestMethod 完成。
我没有弄清楚的一件事是:如何获得可以在构建中使用的构建步骤列表? API 文档 (https://www.visualstudio.com/en-us/docs/integrate/api/overview) 不包含任何对我有帮助的内容。我也没有在 StackOverflow 上找到与我的问题相关的任何内容(假设我使用了正确的搜索词)。
虽然我可以添加新的构建定义,但我不知道如何正确添加构建步骤,例如运行脚本、发布测试结果等。
到目前为止我的研究:
- 我可以获得我的构建定义列表。这些定义具有属性 url,我可以使用它来请求描述我的构建步骤的 JSON 数据,例如http://dsc1tfs1:8080/tfs/AutomatedLab/1900e200-5238-4956-816c-b29c50163f93/_apis/build/Definitions/1
- 这些构建步骤是手动创建的,需要自动化
-
来自上述 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/en-us/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
)
}
}
【问题讨论】:
-
刚刚使用了 Chrome 开发者工具,我估计你需要查看的 URL 是:
https://<foo>.visualstudio.com/_apis/distributedtask/tasks?visibility%5B%5D=Build -
嗨@gvee,这正是我所需要的,谢谢。
标签: rest powershell tfs azure-devops