从脚本中的powershell命令获取退出代码并将其传递给Jenkins

时间:2015-09-16 14:29:10

标签: powershell batch-file jenkins

我正在阅读有关如何从powershell脚本获取错误并将其传递给调用它的批处理文件的内容。 bacth文件只是一个Jenkins构建步骤(执行Win批处理),它就像那样简单:

powershell -ExecutionPolicy Unrestricted -File C:\Users\hicciuser\invoke.ps1
echo %ERRORLEVEL%
exit %ERRORLEVEL%

powershell脚本非常简单:

Invoke-WebRequest -Uri "https://random.url" -TimeoutSec 2
Exit $LASTEXITCODE

事实证明,如果网络请求失败(在这种情况下超时),那么%ERRORLEVEL%似乎仍为0.

如果在脚本中我执行Exit 1,那么%ERRORLEVEL%已正确设置,因此Invoke-WebRequest命令似乎未在失败时设置正确的退出代码。是否有一种更简单的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:0)

最后我选择了这个解决方案,但我真的想知道如何从Invoke-WebRequest(或任何其他CmdLet)返回正确的错误代码:

$failing = 0
$Error.Clear()
try { 
    Invoke-WebRequest -Uri $url 
}
catch { 
    Write-Host $Error
    $failing = 1 
}
Exit $failing

至少我可以获得一个不为零的退出代码,Jenkins会很开心并且无法构建。

答案 1 :(得分:0)

如果您想退出响应状态代码,可以执行以下操作:

try { 
    Invoke-WebRequest -Uri $url 
    Exit 0
}
catch { 
    Exit $_.Exception.Response.StatusCode.Value__
}