使用 Powershell 安排 Azure DevOps 发布

Scheduling a Azure DevOps release using Powershell

我能够使用 Rest API 调用触发 Azure DevOps 版本。但是,当我尝试通过添加计划来做到这一点时,它不起作用。我使用的代码如下:

$PATtoken= 'PAT'
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($PATtoken)"))
$header=@{authorization= "Basic $token" }
$defurl = "https://vsrm.dev.azure.com/Orgnization/Project/_apis/release/definitions/13?api-version=5.1" 

$definition = Invoke-RestMethod -Uri $defurl -Method Get -Headers $header
$triggers =  ' 
    [{
        "schedule": {
        "timeZoneId": "India Standard Time",
        "startHours": 20,
        "startMinutes": 40,
        "daysToRelease": 31
    }
    }]'

$definition | Add-Member -NotePropertyName "triggers" -NotePropertyValue (Convertfrom-Json $triggers) -Force
$json = @($definition) | ConvertTo-Json -Depth 99 

$updatedef = Invoke-RestMethod  -Uri $defurl  -Method Put -Body $json -ContentType "application/json" -Headers $header
Write-Host ($updatedef.triggers | ConvertTo-Json -Depth 99)

但不幸的是,调度或触发没有发生。

您不应将计划添加到 triggers 以配置发布管道计划执行。

您可以使用 Postman 作为测试。见下图:

即使我在请求正文中配置了调度脚本,响应正文仍然没有内容trigger


要设置 时间表 ,您需要将上面的时间表脚本应用到嵌套在 environment 下的 schedules。此外,您可以使用 Fiddler 捕获记录以通过配置来自 UI.

schedule release 来确认这一点

你可以这样做:

...
$definition = Invoke-RestMethod -Uri $defurl -Method Get -Headers $header
$hash = @(
    @{ triggerType="schedule";
       schedule = @{"daysToRelease"="31";"timeZoneId"="India Standard Time";"startHours"="20";"startMinutes"="40"}
    }
)

$definition.triggers = $hash
$json = $definition | ConvertTo-Json -Depth 99
Invoke-RestMethod -Uri $defurl -Method Put -Body $json -ContnetType application/json -Headers $header