上章节介绍Jenkins master/slave 模式的基础配置,见链接
每当slave节点重启slave agent 服务没法启动,导致Jenkins构建无法找到目标节点,我们希望slave节点在操作系统自启动后代理服务agent 可以自动启动并连接Jenkins master。
本章节在操作系统Centos8基础上添加slave agent自启动,我们以其中一个节点node_104_60为例进行演示,对应节点IP:10.110.104.60
点击节点看到节点详情
1,目标节点下载agent.jar
curl -sO http://10.110.60.123:6060/jnlpJars/agent.jar
2,安装jdk8
找到适合agent.jar对应的jdk版本并解压安装,配置环境变量,熟悉Java的大家都会自行配置即可;
3,启动agent.jar
java -jar agent.jar -jnlpUrl http://10.110.60.123:6060/computer/node%5F104%5F60/jenkins-agent.jnlp -secret 1f31dbd9f2dac19cdf56a28278ca211e92b341f4ee1fbccbb0904e96587e8518 -workDir "/data/proj/jenkins"
启动成功后可以看到节点node_104_60前面的红X消失,恢复正常,说明slave已经与master完成连接。
4,agent开机自启动
a,编写agent启动脚本 jenkins-daemon.sh
vim /data/proj/jenkins/jenkins-daemon.sh
#!/bin/bash
JENKINS_PATH=/data/proj/jenkins
cd /data/proj/jenkins
start()
{
status
echo "starting jenkins-agent....."
if [ -z "$pid" ] || [ $pid -eq 0 ] ; then
curl -sO http://10.110.60.123:6060/jnlpJars/agent.jar
nohup $JENKINS_PATH/jdk/bin/java -jar agent.jar -jnlpUrl http://10.110.60.123:6060/computer/node%5F104%5F60/jenkins-agent.jnlp -secret @secret-file -workDir $$
JENKINS_PATH > $JENKINS_PATH/stdout.log 2>&1 &
if [ $? -eq 0 ];then
sleep 3
status
if [ -z "$pid" ] ; then
echo "jenkins started fail....,trace log in stdout.log"
return
else
echo "jenkins started success, the pid=${pid}"
fi
else
echo "jenkins start failed, excute current command error......!"
fi
else
echo "jenkins pid=$pid is running,please stop it and try it again!"
fi
}
stop()
{
#pid=`ps -ef|grep "jenkins-agent"|grep -v "grep"|awk '{print $2}'`
echo "begin shutdown jenkins-agent....."
status
if [ -z "$pid" ] ; then
echo "No jenkins running."
return 2;
else
echo "The jenkins(${pid}) is running..."
#这列可以替换为kill pid但是不安全,但执行效率更高
kill -9 $pid
echo "shutdown jenkins ok"
fi
}
restart() {
stop
sleep 5
start
}
status() {
pid=`ps -ef|grep "jenkins-agent"|grep -v "grep"|awk '{print $2}'`
if [ -z "$pid" ] ; then
echo "No jenkins running."
return 1;
fi
echo "The jenkins(${pid}) is running..."
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
esac
b,编写自启动服务注册脚本jenkins.service
vim /usr/lib/systemd/system/jenkins.service
[Unit]
Description=jenkins-agent auto start
After=network.target
[Service]
Type=forking
User=root
Group=root
#PIDFile=/data/proj/jenkins/jenkins.pid
ExecStart=/data/proj/jenkins/jenkins-daemon.sh start
ExecReload=/data/proj/jenkins/jenkins-daemon.sh restart
ExecStop=/data/proj/jenkins/jenkins-daemon.sh stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
c,加入到系统开机自启动服务
systemctl enable jenkins.service
d,手动启动agent服务
systemctl start jenkins.service
e,查看命令agent服务运行状态
systemctl status jenkins.service
执行命令后可看到agent的运行状态
如果在执行启动发生错误可以通过命令查看详细错误:
journalctl -xe
f,系统重启后查看agent成功启动
[root@lw-app-08 jenkins]# ps aux |grep jenkins-agent
root 205739 0.7 0.7 7835652 122920 ? Sl 16:22 0:10 /data/proj/jenkins/jdk/bin/java -jar agent.jar -jnlpUrl http://10.110.60.123:6060/computer/node%5F104%5F60/jenkins-agent.jnlp -secret @secret-file -workDir /data/proj/jenkins
5,systemctl 服务相关命令补充
# 重新加载服务
systemctl daemon-reload
# 启动服务
systemctl start jenkins.service
# 停止服务
systemctl stop jenkins.service
# 重启服务
systemctl restart jenkins.service
# 查看服务状态
systemctl status jenkins.service
# 设置开机自动启动服务
systemctl enable jenkins.service
# 取消开机自动启动服务
systemctl disable jenkins.service
# 查看服务是否开机启动
systemctl is-enabled jenkins.service
# 查看已启动的服务列表
systemctl list-unit-files|grep enabled
# 查看启动失败的服务列表
systemctl --failed