簡體   English   中英

如何使用REST API獲得TFS構建步驟?

[英]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,可用於請求描述我的構建步驟的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/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM