首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从主机重启Jenkins slave

从主机重启Jenkins slave
EN

Stack Overflow用户
提问于 2015-03-20 19:07:26
回答 3查看 57.2K关注 0票数 13

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

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

我们如何才能做到这一点?

注意:使用jenkins-slave作为服务是不可行的,因为我们还会遇到其他的安全访问问题。

EN

回答 3

Stack Overflow用户

发布于 2016-02-27 18:35:57

我知道这个答案来得有点晚:

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

适用于Windows计算机的 :

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

适用于Mac计算机的 :

  1. 这一过程在mac上相对容易一些。首先,创建一个作业,在Mac节点
  2. 上运行"shutdown ssh now“,该节点应该简单地设置为通过ssh连接。这将负责把它放到詹金斯的网上。

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

代码语言:javascript
复制
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机的启动文件夹中的批处理脚本(比如cleanTemp.bat)中。(对于Windows10,C:\Users\AppData\Roaming\Microsoft\Windows\Start菜单\程序\启动)

代码语言:javascript
复制
rmdir %temp% /s /q

md %temp%
票数 12
EN

Stack Overflow用户

发布于 2015-06-15 22:01:30

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

不过,我刚刚断开了连接,然后我看到进程在从进程中死亡了。我不需要手动杀死他们。然后再次启动从属程序,就是这样。

这在web用户界面中很好用。我还没有为此搜索CLI。

票数 4
EN

Stack Overflow用户

发布于 2018-05-14 16:50:42

  1. 创建作业,例如“重启-从机”,设置为shell "shutdown -r -t 0",并以目标从机名为参数。(这样,重新启动命令将直接在目标从机上执行,您想要重新启动另一个作业,例如restart.)
  2. Create。"Reboot-Check- slave -Online",在这个作业中,你应该调用第一个作业,并将目标slave名称作为参数传递,另外,你最好写一些逻辑来判断你的slave是否完成了重启并再次连接到Jenkins服务器,你可以通过在作业中添加一个“执行系统groovy脚本”步骤来实现,并编写以下代码:

导入hudson.model。* def target_slave_param = " target_slave“def解析器= build.buildVariableResolver def target_slave= resolver.resolve(target_slave_param) println "target_slave is:${target_slave}”def status = 0;//do{ println“查找${target_slave}";slave = Hudson.instance.slaves.find({it.name == target_slave});if (slave != null) { computer = slave.getComputer();if (computer.isOffline()) { println“错误!$target_slave脱机。”;status = 1;} else { println "OK:$target_slave is online";}} else { println“找不到从属$target_slave!”;status = 1;} //}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29165080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档