使用Powershell计划Azure DevOps版本

时间:2019-11-26 16:09:13

标签: powershell azure-devops azure-pipelines azure-pipelines-release-pipeline azure-devops-rest-api

我能够使用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)

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

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式做到这一点:

...
$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

答案 1 :(得分:1)

您不应将时间表添加到triggers中以配置发布管道时间表的执行。

您可以将Postman用作测试。参见下面的图片:

enter image description here

即使我已经在请求正文中配置了计划脚本,响应正文在trigger中仍然没有内容。


要设置计划,您需要将上述计划脚本应用于schedules,该脚本嵌套在environment下。另外,您可以使用Fiddler捕获记录,以通过在 UI 中配置计划版本来确认。

enter image description here