此问题是我其他问题的延续-How to schedule an on-premise Azure DevOps build to run every 5 minutes?
我不知道如何编写构建计划的脚本。我应该使用什么API?
如果您打算使用REST API设置构建计划,则可以使用Definitions - Update
从UI设置时间表时,您也可以在浏览器中按F12来跟踪API。
返回您的要求:
如何安排本地Azure DevOps内部版本每5分钟运行一次?
就像您提到的那样,当前本地Azure DevOps服务器目前不支持YAML中的计划。而且,用于定义基于时间的构建触发器的UI不够灵活。因此,我们无法实现内置功能那样的功能。
但是,我们可以每隔5分钟调用queue build REST API将构建排队,我们有两种方法可以做到这一点:
编写脚本以调用队列构建REST API,然后运行它定期在客户端计算机上,我们可以使用Windows Task进行设置调度程序。请参考下面的博客来做到这一点:
示例:
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 )
}