azure-devops - 如何让 Azure DevOps Pipeline 等待外部进程完成?
问题描述
我正在使用部署在本地的 Azure DevOps 服务器。我想使用Azure DevOps Pipelines实现以下目标:
- 拉取、构建和打包 C# 解决方案。
- 调用专有部署服务器(部署在与 ADOS 相同的网络中)以获取包并将其部署到目标计算机。
- 让部署服务器向 Azure DevOps 发出它已完成部署的信号。
- 原始(或依赖?)管道针对新部署的目标运行一些测试。
我无法在文档中找到合适的任务来完成这项工作。我错过了什么吗?我可以编写自己的自定义任务来让管道等待外部信号吗?
解决方案
为了使管道启动然后等待我的外部进程,我选择了阻力最小的路径并将其编码为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
,以便在管道中运行时更容易调试。
推荐阅读
- python - 从表中获取数据并将其保存在另一个表中
- components - Laravel Jetstream 组件
- go - 如何将文件上传到 Google Cloud Storage Bucket 子目录
- html - 在运行时添加到,但它添加到
- jtag - 我如何以编程方式知道 Trace32 启动是否已完成?
- typo3 - 我如何将当前 URL 段作为常量
- python - 找不到获取 json 代码的脚本标签
- ssl - 证书是否对 url dev.user.svc.databaker.io 有效
- javascript - 如何将 Firestore 集合作为 json 对象返回?
- powerbi - 有没有办法在保持多个过滤器集的同时计算总数的百分比?