自动化测试:k8s环境下,通过检测文件是否存在来自动启停tomcatapp的方法_20160316_七侠镇莫尛貝
通常情况下,容器里的tomcatapp不需要经常启动停止。但在做jenkins自动化测试时,为了更新war包,修改配置什么的,少不了要频繁重启tomcat。tomcat 本身支持远程部署war包,但修改配置他就没辙了。重启tomcat的方法:1. jenkins 通过ssh插件,登录到容器,执行重启命令。 这需要为容器配置ssh,配置k8s暴露容器端口,麻烦,也不太安全。2.在容器
通常情况下,容器里的tomcatapp不需要经常启动停止。但在做jenkins自动化测试时,为了更新war包,修改配置什么的,少不了要频繁重启tomcat。tomcat 本身支持远程部署war包,但修改配置他就没辙了。
重启tomcat的方法:
1. jenkins 通过ssh插件,登录到容器,执行重启命令。 这需要为容器配置ssh,配置k8s暴露容器端口,麻烦,也不太安全。
2.在容器里再开一个tomcat,写一个jsp,去执行shell命令,jenkins通过wget 这个url 来启停另一个tomcat。这需要多耗费一份运行tomcat的资源,而且也要配置k8s暴露容器端口,也不好。
jsp执行shell命令示例,还可以传参数:
remotectl.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%
Runtime run = Runtime.getRuntime();
//new日期对象
Date date = new Date();
//转换提日期输出格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:sss");
String db_username = request.getParameter("db_username");
if(null != db_username){
Process pro = run.exec("/home/mxb/rc.sh " + db_username);
out.println(dateFormat.format(date) + " 正在执行:/home/mxb/rc.sh " + db_username +" ...");
System.out.println(dateFormat.format(date) + " 正在执行:/home/mxb/rc.sh " + db_username + " ...") ;
}else{
out.println(dateFormat.format(date) + "请指定db_username参数。这是系统要使用的数据库表空间和用户名称,必须为大写。 ");
}
%>
3.写一个脚本monitor.sh,让容器一直运行之,循环检测某个文件是否存在(这个文件可以通过volumeMounts挂载到jenkins和tomcatapp容器里 ),来实现jenkins可控的启停。
这个脚本还可以保持容器一直运行。
rc-myapp.yaml:
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-myapp
spec:
replicas: 1
selector:
name: myapp
template:
metadata:
labels:
name: myapp
spec:
containers:
- name: myapp
image: kimqcn/u14.04
# command: ["/usr/sbin/sshd","-D"]
# command: ["/tomcat_rc_9999/bin/catalina.sh","run"]
command: ["/tomcat/monitor.sh"]
ports:
# - containerPort: 22
- containerPort: 8080
# - containerPort: 9999
monitor.sh: 在启停tomcat前,先检测一下8080端口,避免重复启动,防止做无用功。
#!/bin/bash
# 本脚本在Docker容器启动时运行。
# 脚本功能:循环(间隔5秒)检测/tomcat/目录下是否存在on文件。
# 如果存在on文件,则启动tomat: /tomcat/bin/startup.sh
# 如果不存在on文件,则停止tomcat: /tomcat/bin/stop_tomcat.sh
# 作者: mxb
# Ver: 2016-03-02
Flag_File=/tomcat/on
while true;do
if [ ! -f "$Flag_File" ]; then
echo "`date '+%Y%m%d %H%M%S'` Flag_File检测...不存在! 停止tomcat!" > /dev/null
netstat -lnp|grep 8080 > /dev/null
if [ $? -eq 0 ];then
echo "`date '+%Y%m%d %H%M%S'` Flag_File检测...不存在! 停止tomcat!"
/tomcat/bin/stop_tomcat.sh
echo ""
else
echo "tomcat 未启动..,不做操作!" > /dev/null
fi
#echo ""
sleep 5
continue
else
# echo "`date '+%Y%m%d %H%M%S'` Flag_File检测...存在! 启动tomcat!"
netstat -lnp|grep 8080 > /dev/null
if [ $? -eq 0 ];then
echo "tomcat 已经启动了..不做操作!" > /dev/null
else
echo "`date '+%Y%m%d %H%M%S'` Flag_File检测...存在! 启动tomcat!"
/tomcat/bin/startup.sh
echo ""
fi
#echo ""
sleep 5
fi
done
stop_tomcat.sh:根据端口杀进程
kill -9 $(netstat -tlnp | grep 8080 | awk '{print $7}' | awk -F '/' '{print $1}')
更多推荐
所有评论(0)