首页 > 解决方案 > 主机重启后如何继续詹金斯管道。

问题描述

我有一个 Jenkins 作业,目前用于重新启动主机,这是管道的一部分,并且有几个下游作业。目前,在开始下游构建之前,该作业正在重新启动并处于休眠状态。在作业中是否有更好的方法来检查主机是否在继续而不是使用睡眠之前备份?

Reboot_host 作业当前正在执行:

ssh <hostname> "sudo reboot"
sleep 90

主机是虚拟机,这就是睡眠时间如此短的原因。

标签: jenkins

解决方案


我假设您在Jenkinsfile这里使用 a ,因为您说的是“管道”;如果没有,请提供有关您工作的更多信息(带有执行外壳的自由式等)。

您可能需要sleep参与其中,但您可以结合使用它retry来获得更快的成功(和更快的失败)。假设您只需要启动虚拟机,您可以使用以下内容:

retry(20){
    sleep time: 5 unit: 'SECONDS'
    sh 'ssh -o ConnectTimeout=1 <hostname> exit'
}

这将每 5 秒尝试一次 ssh 到主机。添加 ConnectTimeout 意味着ssh将只等待 1 秒以完成连接。exit只是确保成功连接断开。retry将评估命令最多 20 次,直到sh命令具有0(成功)退出值。如果它运行 20 次而没有成功,则构建将失败(这可能很好,因为这意味着您的 VM 不可用于下游作业)。

如果您正在等待某项特定服务,您可以curl或以其他方式尝试联系该服务,而不是使用ssh.


推荐阅读