温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to make an Azure DevOps Pipeline wait for an external process to complete?
azure-devops azure-pipelines

其他 - 如何使Azure DevOps Pipeline等待外部过程完成?

发布于 2020-04-14 17:15:41

我正在使用在本地部署的Azure DevOps Server。我想使用Azure DevOps Pipelines实现以下目标

  1. 拉取,构建和打包C#解决方案
  2. 调出专用的部署服务器(与ADOS部署在同一网络中)以拾取软件包并将其部署到目标计算机
  3. 让部署服务器向Azure DevOps发出已完成部署的信号
  4. 原始(或相关?)管道针对新部署的目标运行一些测试

我无法在文档中找到合适的任务来完成此任务。我想念什么吗?我可以编写自己的自定义任务以使管道等待外部信号吗?

查看更多

提问者
urig
被浏览
110
urig 2020-02-03 23:55

为了启动管道,然后等待我的外部进程,我选择了阻力最小的路径并将其编码为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在上面的代码中添加有意义的消息是一个好主意,以使其在管道中运行时更易于调试。