一 在jenkins节点安装ansible
1.1 安装ansible
yum install ansible -y
1.2 设置配置文件
cat /etc/ansible/hosts
[java]
172.22.178.214
二 拷贝公钥到各个目标服务器
#拷贝root用户公钥-在jenkins服务器上执行
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.22.178.214
ansible java -m shell -a 'pwd'
172.22.178.214 | CHANGED | rc=0 >>
/root
三 配置jenkins使用ansible
3.1 配置jenkins
配置分支 要选择 git参数,如果没有,则需要安装插件 Git Parameter
配置git 仓库
配置maven-找到全局工具配置
此脚本需要传输两个参数,主机名(ansible配置文件里的)和项目名
3.2 配置shell脚本在jenkins服务器上
这个脚本是配置在jenkins服务器上的,这个脚本需要传入两个参数,host和项目名。其中重启服务的脚本是在目标机器上
#!/bin/bash
jar_file=`ls ${WORKSPACE}/${Branch}/target/*.jar`
DATE=`date +"%Y-%m-%d-%H-%M"`
HOST=$1 #hwtest,pre_shandong,pre_zuigaoyuan
project=$2
commond="cat /etc/profile | grep 'export JAVA_HOME' |cut -d '=' -f 2"
cmd=`ansible $HOST -m shell -a "$commond" -b`
JAVA_PATH=`echo $cmd |awk '{print $7}'`
path=/www/wwwroot/$project
#建立backup目录
ansible $HOST -m shell -a "mkdir -p $path/backup" -b
#备份之前的jar包
ansible $HOST -m shell -a "cd $path;mv *.jar $path/backup/" -b
## 拷贝jar包
ansible $HOST -m copy -a "src=$jar_file dest=$path" -b
# 杀掉进程
# ansible $HOST -m shell -a "ps -ef | grep $project | grep -v grep |awk '{print \$2}'|xargs -i kill -9 {}" -b
## 重启服务
ansible $HOST -m shell -a "sh $path/maidian.sh restart"
## 查看服务
ansible $HOST -m shell -a "ps -ef | grep $project | grep -v grep"
3.3 重启脚本-在目标服务器上
需要提前做的配置, 1 创建好日志目录 如 /mnt/erp 2 创建好项目目录 如 /www/wwwroot/erp 3 准备好启动脚本 如 /www/wwwroot/erp/erp.sh
#!/bin/bash
JAVA_HOME=/usr/bin/java
DATE=$(date +%Y-%m-%d-%H-%M-%S)
APP_NAME=/www/wwwroot/renkang-circle/circle-1.0-SNAPSHOT.jar
APP_PATH=/www/wwwroot/renkang-circle/
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
echo "##################启动###################"
#启动方法
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
nohup ${JAVA_HOME} -jar ${APP_NAME} --spring.profiles.active=pro >> /mnt/vs-02/circle_${DATE}.log 2>&1 &
#nohup ${JAVA_HOME} -jar ${APP_NAME} --server.port=19557 --spring.profiles.active=self >> /mnt/xinceshi/circle_${DATE}.log 2>&1 &
echo $! > ${APP_PATH}circle.pid
echo "starting....."
sleep 2
echo Program PID=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
fi
}
echo "##################启动完成###################"
#停止方法
stop(){
is_exist
if [ $? -eq 0 ]; then
sudo kill -9 $pid && echo "is stopped"
else
echo "${APP_NAME} is not running"
fi
}
status(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重启
restart(){
stop
sleep 2
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
reload|restart|force-reload)
stop
start
;;
**)
echo "Usage: $0 {start|stop|reload|status}" 1>&2
;;
esac
四 构建
选择对应的分支即可