我使用jenkins主从配置来捕获产品的性能指标。我们观察到jenkins-slave倾向于累积内存,从而影响捕获的性能指标。
为了确保捕获的度量标准的一致性,我们正在考虑每天从主服务器重新启动jenkins从服务器,此时服务器上没有正在运行的作业。这可行吗?
我们怎样才能完成它?
注意:使用jenkins-slave作为服务不是一种选择,因为我们遇到了其他安全访问问题。
答案 0 :(得分:8)
我知道这个答案有点晚了:
这就是我出于同样的原因做同样的事情,不确定这是否是实现这一目标的最佳方式,但它解决了我们的许多问题:
对于Windows计算机:
适用于Mac计算机:
这个过程在mac上比较容易。首先,做一份工作 Mac节点上的“shutdown -r now”
应该设置节点以通过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%
答案 1 :(得分:4)
如果你还需要答案: https://wiki.apache.org/general/Jenkins#How_do_I_restart_a_Jenkins_Unix_Slave.3F
虽然,我刚刚断开连接然后我看到进程在奴隶中死亡。我没有必要手动杀死它们。 然后再次启动奴隶,就是这样。
这很好用于网页用户界面。我还没有为此搜索过CLI。
答案 2 :(得分:0)
创建一个职位,例如“Reboot-Slave”,并使用shell“shutdown -r -t 0”进行设置,并将目标从属名称作为参数。 (这样,restart命令将直接在你想重启的目标从站上执行。)
创建另一个职位,例如“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;
}
//}