我正在使用在本地部署的Azure DevOps Server。我想使用Azure DevOps Pipelines实现以下目标:
我无法在文档中找到合适的任务来完成此任务。我想念什么吗?我可以编写自己的自定义任务以使管道等待外部信号吗?
为了启动管道,然后等待我的外部进程,我选择了阻力最小的路径并将其编码为PowerShell Task。
外部过程通过REST API控制。通过POST请求完成启动,然后循环继续使用GET请求轮询API,以查看工作是否完成。如果经过了一定的时间却没有成功完成该过程,则循环中止并且任务失败。
这是我的代码的要点:
$TimeoutAfter = New-TimeSpan -Minutes 5
$WaitBetweenPolling = New-TimeSpan -Seconds 10
# Launch external process
Invoke-RestMethod ...
$Timeout = (Get-Date).Add($TimeoutAfter)
do
{
# Poll external process to see if it is done
$Result = Invoke-RestMethod ...
Start-Sleep -Seconds $WaitBetweenPolling.Seconds
}
while (($Result -eq "IN_PROGRESS") -and ((Get-Date) -lt $Timeout))
if ($Result -ne "SUCCESS")
{
exit 1
}
PS- Write-Host
在上面的代码中添加有意义的消息是一个好主意,以使其在管道中运行时更易于调试。
感谢您在这里分享您的解决方案,请您接受您的解决方案作为答案吗?因此,对于遇到相同问题的其他成员轻松找到解决方案将很有帮助。