返回成功,然后重新启动计算机

时间:2018-08-06 18:18:40

标签: powershell jenkins

我正在将Jenkins与很多东西集成在一起,并且我使用powershell来做到这一点。我在远程计算机上有一个脚本,该脚本在jenkins上成功构建后执行。该脚本会执行很多操作,然后将重新启动计算机。

我需要做的是:

  1. 返回jenkins脚本已成功执行(意味着它将以SUCCESS身份结束工作)
  2. 然后重新启动计算机

到目前为止,我还没有设法将'EXIT 0'发送给jenkins,然后重新启动计算机。反正有这样做吗?

谢谢。

代码示例:

Write-Host "Code example"
Exit 0 #for jenkins success
Restart-Computer -Force

2 个答案:

答案 0 :(得分:2)

这将托管一个单独的命令提示符,该命令提示符从powershell脚本异步运行,并在3秒钟内重新启动计算机,足够的时间让powershell将退出代码返回给jenkins。

Start-Process -FilePath "cmd.exe" -ArgumentList '/c "timeout /t 3 /nobreak && shutdown -r -f -t 0"' -WindowStyle Hidden
Exit 0

答案 1 :(得分:0)

如@Avshalom的评论中所述,您的问题是Exit语句将无条件退出脚本,而无需执行放置在之后Restart-Computer命令。 / p>

Restart-Computer,在本地执行时,总是异步,因此您的脚本将继续执行,至少持续一段时间。

因此,您可以尝试先致电Restart-Computer,然后再致电exit 0

Write-Host "Code example"
Restart-Computer -Force
exit 0 # for Jenkins success

但是,没有保证可以将控制权及时归还Jenkins,并且Jenkins本身将有时间在成功关闭退出之前对其进行处理。

您可以通过单独的异步启动的PowerShell实例 [1] 通过 delay 来提高这种可能性,类似于Evilcat's answer中的方法:

Write-Host "Code example"

# Asynchronously start a separate, hidden PowerShell instance 
# that sleeps for 5 seconds before initiating the shutdown.
Start-Process -WindowStyle Hidden powershell.exe -Args '-command',
  'Start-Sleep 5; Restart-Computer -Force'


exit 0 # for Jenkins success

但是,这仍然不是一个完全可靠的解决方案。一个完全可靠的解决方案需要更改您的方法:

  • 让您的脚本仅指示成功,而不启动重新启动。

  • 让Jenkins测试是否成功,如果成功,请调用另一个无条件启动关闭脚本。


[1]正如Evilcat指出的那样,将后台作业Start-Job一起使用不会有效 ,因为在退出调用PowerShell会话时exit后台作业也被终止。