如何使用Azure DevOps REST Api编写构建时间表的脚本?

问题描述 投票:0回答:1

此问题是我其他问题的延续-How to schedule an on-premise Azure DevOps build to run every 5 minutes?

我不知道如何编写构建计划的脚本。我应该使用什么API?

azure-devops-rest-api
1个回答
0
投票

如果您打算使用REST API设置构建计划,则可以使用Definitions - Update

从UI设置时间表时,您也可以在浏览器中按F12来跟踪API。

返回您的要求:

如何安排本地Azure DevOps内部版本每5分钟运行一次?

就像您提到的那样,当前本地Azure DevOps服务器目前不支持YAML中的计划。而且,用于定义基于时间的构建触发器的UI不够灵活。因此,我们无法实现内置功能那样的功能。

但是,我们可以每隔5分钟调用queue build REST API将构建排队,我们有两种方法可以做到这一点:

  1. 编写脚本以调用队列构建REST API,然后运行它定期在客户端计算机上,我们可以使用Windows Task进行设置调度程序。请参考下面的博客来做到这一点:

  2. 在脚本中进行了硬编码,打开控制台以在任何客户端,可以访问Azure DevOps服务器(PowerShell下)脚本适合我):

示例:

Param(
       [string]$collectionurl = "https://server/DefaultCollection",
       [string]$projectName = "ProjectName",
       [string]$BuildDefinitionId = "11",
       [string]$user = "username",
       [string]$token = "password/PAT"
    )

    # Base64-encodes the Personal Access Token (PAT) appropriately
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

    function CreateJsonBody
    {

        $value = @"
      {
      "definition": {
        "id": $BuildDefinitionId
      }

    }
    "@

     return $value
    }

    $json = CreateJsonBody

    $uri = "$($collectionurl)/$($projectName)/_apis/build/builds?api-version=5.1"


    $EndTime = Get-Date
    while($true) {
        $EndTime = $EndTime.AddMinutes(5)

        ###Queue build###
        $result = Invoke-RestMethod -Uri $uri -Method Post -Body $json -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}


        Start-Sleep -Seconds $( [int]( New-TimeSpan -End $EndTime ).TotalSeconds )
    }
© www.soinside.com 2019 - 2024. All rights reserved.