我正在尝试在Azure DevOps中为Web应用程序设置部署管道。作为此过程的一部分,我需要向API发出POST,以便与我们的监视服务提供商创建维护窗口,以便维护Web应用程序的SLA。为了为此API请求创建JSON有效负载,我需要在维护窗口的开始和结束时都具有确切的日期/时间。
到目前为止,我已经为要运行的代理作业设置了一个PowerShell任务设置,以便获得正确时区中的时间(代理和部署代理都位于同一设施/时区中)。
由于我在脚本中遇到的长度限制,我不得不缩写一些变量名。但是$da
只是维护时段长度的duration参数。
Param([int]$da)
$df="yyyy-MM-dd"
$tf="HH:mm"
$start=(Get-Date).AddMinutes(1)
$end=$start.AddMinutes($da)
$startDate = $start.ToString($df)
$startTime=$start.ToString($tf)
$endDate=$end.ToString($df)
$endTime=$end.ToString($tf)
Write-Host "##vso[task.setvariable variable=startDate]$startDate"
Write-Host "##vso[task.setvariable variable=startTime]$startTime"
Write-Host "##vso[task.setvariable variable=endDate]$endDate"
Write-Host "##vso[task.setvariable variable=endTime]$endTime"
这工作正常,我可以通过使用新的PowerShell任务来验证变量设置是否正确,该任务将在同一任务之后立即运行
Write-Host $env:startDate
Write-Host $env:startTime
Write-Host $env:endDate
Write-Host $env:endTime
但是,当我尝试在无代理作业的调用REST API任务中使用这些变量时,它们显示为空。我现在将其发布到postman-echo.com
,以验证我的有效载荷。
{
display_name:"$(Release.ReleaseName)",
description:"Deployment requested by $(Release.RequestedFor)",
start_date:"$(startDate)",
start_time:"$(startTime)",
end_date:"$(endDate)",
end_time:"$(endTime)"
}
似乎变量在Jobs之间不存在。就是说,考虑到PowerShell脚本任务在无代理作业中不可用,而Invoke REST API任务仅在无代理作业中可用,我该如何实现我的目标?我需要一种在无代理作业中运行脚本的方式,以为部署过程生成日期/时间