【发布时间】:2021-11-19 18:35:36
【问题描述】:
我在 PowerShell 命令步骤中使用 Jenkins 来调用 Web API 服务。我正在使用Invoke-WebRequest 调用服务。
此服务调用必须在 Jenkins 中进行,因为只有在其他 Jenkins 作业成功完成时我才需要这样做。
服务可以运行几个小时。如果我没有 TimeoutSec 参数,则该步骤会在 Web API 完成之前以超时完成。如果我的参数值很大,比如 36000,那么 Web API 会正常完成,但步骤会持续 10 小时。其他参数与此问题无关。
我正在寻找一种在 Web API 完成后立即完成 Jenkins 步骤的好方法,而不是更早更晚。
try
{
$url = "https://ourserver.com/modules/OurService"
$response = Invoke-WebRequest -Uri $url -UseDefaultCredentials -Method Get -TimeoutSec 36000 -UseBasicParsing
}
catch
{
$err=$_.Exception
Write-Host '-----------------------'
Write-Host $err
Write-Host '-----------------------'
exit -1
}
exit 0
【问题讨论】:
-
您能否在 Jenkins 中添加有关您的工作定义的更多信息?也许尝试设置
MaxServicePointIdleTime? stackoverflow.com/a/34139528/7411885 -
如何判断“Web API正常完成”?也许它只是完成了它的工作,但实际上并没有返回响应?
-
Cpt.Whale - 此作业仅包含两个步骤:构建触发器和构建。我没有问题定义一个固定的时间段,之后发生超时。我只是不知道如何在 Web API 完成时(而不是之前)准确退出。
-
zett42 - 我的 Web API 在成功时返回 200(OK)(我非常有信心这样做,因为 PostMan 指出了这一点)。我应该以某种方式检查 $response 中的 200 值吗?这似乎是对 Invoke-WebRequest 的同步调用,完成后永远不会到达“exit 0”。
-
如果
$response设置为 200,那么接下来应该已经是exit。如果请求确实占用了整个超时时间,那么该命令应该抛出一个超时错误而不是正常退出。
标签: powershell jenkins webapi invoke-webrequest invoke-restmethod