首页 > 解决方案 > 在无代理作业中运行脚本

问题描述

我正在尝试在 Azure DevOps 中为 Web 应用程序设置部署管道。作为此过程的一部分,我需要向 API 发出 POST,以便与我们的监控服务提供商创建维护窗口,以便维护我们的 Web 应用程序的 SLA。为了为此 API 请求创建 JSON 有效负载,我需要知道维护窗口开始和结束的确切日期/时间。

到目前为止,我有一个 PowerShell 任务设置来运行代理作业,以便在正确的时区中获取时间(代理和部署代理都在同一个设施/时区中)。

由于脚本的长度限制,我不得不缩写一些变量名。但这$da只是维护窗口长度的持续时间参数。

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

但是,当我尝试在无代理作业的 Invoke 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)"
}

看起来变量在作业之间不会持续存在。话虽如此,考虑到 PowerShell 脚本任务在无代理作业中不可用,并且 Invoke REST API 任务仅在无代理作业中可用,我该如何实现我的目标?我需要一种在无代理作业中运行脚本的方法来为我的部署过程生成日期/时间

标签: powershellazure-devops

解决方案


推荐阅读