1

我在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
4

1 回答 1

0

我尝试了不同的方法,我认为我更接近我现在想要的位置......

我决定使用Invoke-RestMethod

一个奇怪的问题仍然存在:当我的长时间运行的服务被调用并且该服务完成时,我陷入困境,但异常没有任何内容。根据我的服务日志,我知道服务已成功完成。所以,在这一点上,我认为它是成功的。

try
{
  $url = "https://ourserver.com/modules/OurService"
  $response = Invoke-RestMethod -Uri $url -UseDefaultCredentials -Method Get -TimeoutSec 18000
  $response  
  Write-Host 'Exit with success'
  exit 0
}
catch
{
  if (($_.Exception) -and ($_.Exception.Response))
  {
    $respStream = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($respStream)
    $reader.BaseStream.Position = 0
    $responseBody = $reader.ReadToEnd() | ConvertFrom-Json
    '------------------------------------------------------------------------------------------------------------------------' 
    'Error Message:'
    $responseBody.Message
    $_.Exception
    '------------------------------------------------------------------------------------------------------------------------'
    exit -1
  }
  else
  {
    '------------------------------------------------------------------------------------------------------------------------' 
    'Got to catch, but no exception (we should not have gotten to "catch" area, possible PowerShell bug)'  
    '------------------------------------------------------------------------------------------------------------------------'
    exit 0
  }
  
}
于 2022-01-19T15:48:23.327 回答