【问题标题】:How to get TFS build steps with the REST api?如何使用 REST api 获取 TFS 构建步骤?
【发布时间】: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


【解决方案1】:

没有记录;但它就在那里!

https://<foo>.visualstudio.com/_apis/distributedtask/tasks?visibility%5B%5D=Build

不要忘记,您可以使用 Chrome 开发者工具之类的工具来查看正在发出的请求;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 2019-10-13
    • 2023-03-07
    • 2011-04-25
    • 2017-04-16
    • 2016-04-21
    • 2017-06-23
    • 2019-12-02
    相关资源
    最近更新 更多