繁体   English   中英

重启 Jenkins slave from master

[英]Restart Jenkins slave from master

我使用 jenkins 主从配置来捕获产品的性能指标。 我们观察到 jenkins-slave 倾向于累积 memory,从而影响捕获的性能指标。

为了确保捕获的指标的一致性,我们正在考虑每天从主服务器上重启 jenkins 从服务器,当从服务器上没有运行任何作业时。 这可行吗?

我们怎样才能做到呢?

注意:使用 jenkins-slave 作为服务不是一种选择,因为我们有其他安全访问问题。

我知道这个答案有点晚了:

这就是我出于同样的原因做同样的事情,不确定这是否是实现这一目标的最佳方法,但它解决了我们的许多问题:

对于Windows机器:

  1. 创建一个只在Windows机器上运行“shutdown -r -f”的作业。 它将重启机器。
  2. 现在把它带回在线部分。 出于与你类似的原因,我没有使用“jenkins-slave作为服务”。 相反,我将节点配置为通过JNLP客户端连接,然后为Window的任务调度程序中的每个节点添加slave.jar命令(在启动时运行)
  3. 现在,作业重新启动机器,Windows机器在重启后立即在Jenkins上自动联机。

对于Mac机器:

  1. 在mac上,这个过程相对容易一些。 首先,在Mac节点上运行“shutdown -r now”

  2. 应该简单地设置节点以通过ssh连接。 这将负责在Jenkins上线。

这是我的脚本的“执行shell”部分,用于重新启动用于自动化的所有机器:

distro=`uname`
if [ "$distro" = "Windows_NT" ] || [ "$distro" = "WindowsNT" ] ;then
echo "Restarting Windows Machine...."
shutdown -r -f
else
echo "Restarting Mac Machine...."
sudo shutdown -r now
fi

PS:

它与问题并不完全相关,但可能对您指定的情况有用。 在Windows机器启动时添加批处理脚本来清理临时文件可能是个好主意。 将以下内容添加到Windows计算机的启动文件夹中的批处理脚本(Say,cleanTemp.bat)中。 (对于Windows 10,C:\\ Users \\\\ AppData \\ Roaming \\ Microsoft \\ Windows \\ Start Menu \\ Programs \\ Startup)

rmdir %temp% /s /q

md %temp%

如果您仍需要答案: https//wiki.apache.org/general/Jenkins#How_do_I_restart_a_Jenkins_Unix_Slave.3F

虽然,我只是断开连接,然后我看到进程在奴隶中死亡。 我没有必要手动杀死它们。 然后再次启动奴隶,就是这样。

从Web UI可以很好。 我还没有为此搜索过CLI。

  1. 创建一个作业,例如“Reboot-Slave”,并使用shell“shutdown -r -t 0”进行设置,并将目标从属名称作为参数。 (这样,restart命令将直接在你想重启的目标从站上执行。)

  2. 创建另一个作业,例如“Reboot-Check-Slave-Online”,在这个作业中,你应该调用第一个作业并传递目标从属名称作为参数,另外,你最好写一些逻辑来确定你的奴隶是否完成了重启并再次连接到Jenkins服务器,您可以通过在作业中添加“执行系统groovy脚本”步骤来实现它,并在下面编写代码:

     import hudson.model.* def target_slave_param = "target_slave" def resolver = build.buildVariableResolver def target_slave = resolver.resolve(target_slave_param) println "target_slave is: ${target_slave}" def status = 0; //do{ println "Searching for ${target_slave}"; slave = Hudson.instance.slaves.find({it.name == target_slave}); if (slave != null) { computer = slave.getComputer(); if (computer.isOffline()) { println "Error! $target_slave is offline."; status = 1; } else { println "OK: $target_slave is online"; } } else { println "Slave $target_slave not found!"; status = 1; } //} 

脚步:

  1. 安装Node和Label参数插件
  2. 勾选This project is parameterized选项: 在此处输入图像描述
  3. 执行 shell字段中使用以下命令: 在此处输入图像描述
(sudo bash -c "(sleep 30 && sudo shutdown -r now) &") &

Jenkins 作业已正确分离并显示成功执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM