首页 > 解决方案 > 如何让 Azure DevOps Pipeline 等待外部进程完成?

问题描述

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

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

我无法在文档中找到合适的任务来完成这项工作。我错过了什么吗?我可以编写自己的自定义任务来让管道等待外部信号吗?

标签: azure-devopsazure-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,以便在管道中运行时更容易调试。


推荐阅读