Jenkins Maven打包Jar,部署远程服务器
1. 环境Jenkins 的环境我已经搭建,不会的小伙伴可自行百度。Jenkins 需要配置maven环境、JDK环境。点击 Global Tool ConfigurationMaven的配置路径,确保Linux安装了Maven,找到配置文件路径同样的先安装JDK,再填上路径。建议自己下载JDK。(jdk-8u144-linux-x64.tar.gz)因为OpenJdk只是jre,没有安装jdk,
1. 环境
目录
Jenkins 的环境我已经搭建,不会的小伙伴可自行百度。
Jenkins 需要配置maven环境、JDK环境。
点击 Global Tool Configuration
Maven的配置路径,确保Linux安装了Maven,找到配置文件路径
同样的先安装JDK,再填上路径。建议自己下载JDK。(jdk-8u144-linux-x64.tar.gz)
因为OpenJdk只是jre,没有安装jdk,maven打包会报错。
Git的安装路径
完了后应用和保存
2.jenkins插件配置
需要安装三个插件
SSH plugin
Build With Parameters 输入框式的参数
Persistent Parameter 下拉框式的参数
搜索插件名安装。
安装完重启jenkins
3、设置其他ssh连接服务器的信息:
点进Confgure System,在最底下
Name:取一个自己容易认的名称,如**项目测试机
Hostname:指连接机器的IP或域名
Username:连接机器的用户,必须使用一个有权限的用户,如果觉得root太大,可在服务器另建一个用户,专门用来做jenkins访问使用的
Remote Directory:远程连接上去默认访问的路径,必须存在,并且有权限
勾选下方的权限选项,并设置一个密码password
此密码为登录用户名相对应的密码,并且可用,否则连接不了。
4.新建Maven项目
这个就是刚刚插件的带参数构建,可以自定义一些变量运行,不要每次去改执行脚本
源码管理
这里有个坑勿踩。如果不是特殊需求,千万别勾选“构建触发器”的 Build whenever a SNAPSHOT dependency is built。因为它会自动启动别的maven项目部署。比如生产的部署。
构建环境
勾选SSH, Send files or execute commands over SSH after the build runs
勾选日志,Add timestamps to the Console Output
这里的Remote directory是部署的Linux服务器路径,但是如果SSH配置了路径则最终路径是 SSH配置服务器路径+Remote directory路径
# 这步是jenkins上传的目录复制到你部署的目录
cp /var/xx_services/xx/target/${jar_name} /home/xx_services/jenkins_build/
cd /home/xx_services/xx_sh/;
chmod 777 startadmin.sh;
chmod 777 kill.sh;
./startadmin.sh ${workspace} ${jdk_path} ${jar_name} ${spring_profile} ${status} ${version}
Build POM文件的相对路径
最后应用,保存。
5.构建
红色框都是前面的带参数构建配置的。
最后需要复制sh脚本到你服务器的路径下,这个是前面配置好的路径。
startadmin.sh
#!/bin/bash
export BUILD_ID=dontKillme
WORKSPACE=${1}
JDK_PATH=${2}
JAR_NAME=${3}
spring_profile=${4}
PID=`ps -ef | grep ${JAR_NAME} | grep -v grep | grep -v startup | awk '{print \$2}'`
echo $PID;
if [ ! "$PID" ] ;then
echo "进程不存在"
else
echo "进程存在,杀死进程PID$PID"
# 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
./kill.sh ${JAR_NAME}
fi
echo "服务启动开始"
nohup ${JDK_PATH} -jar -Dspring.profiles.active=${spring_profile} ${WORKSPACE}/${JAR_NAME} &
kill.sh
#!/bin/bash
# $1传递的第一个参数
jar_name=$1
#带上[第一个字母]查找就不会查找到自身查找进程ID了,后面也不能带后缀.jar之类的,否则搜不到,9-15是截取进程ID
PID=`ps -ef | grep [g]ateway-0.0.1-SNAPSHOT | cut -c 9-15 `
echo $1;
echo $PID;
if [ ! "$PID" ] ;then
echo "进程不存在"
else
echo "进程存在,杀死进程PID$PID"
# 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
kill -s 9 $PID
fi
6.高级版本,带回滚,带定期清理备份的startadmin.sh
加了两个变量status=${5} (这个是下拉多选Deploy:部署 ,Rollback是回退需要填写每次构建的版本号version),version=${6}
#!/bin/bash
export BUILD_ID=dontKillme #这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
date_time=`date +"%Y%m%d%H%M%S"`
backup_dir=bak
WORKSPACE=${1}
JDK_PATH=${2}
JAR_NAME=${3}
spring_profile=${4}
status=${5}
version=${6}
case $status in
Deploy) #部署新版本
echo "status:$status"
path="${WORKSPACE}/${backup_dir}/${version}" #创建每次要备份的目录
echo "bakDir:$path"
if [ -d $path ];
then
echo "The files is already exists. "
else
mkdir -p $path
fi
# 1.将打包好的jar包备份到相应目录,覆盖已存在的目标
cp -f ${WORKSPACE}/jenkins_build/${JAR_NAME} $path
echo "backup Completing!"
# 2.杀掉正在运行的进程
# 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
./kill.sh ${JAR_NAME}
# 3.部署新包
echo "从$WORKSPACE/jenkins_build/$JAR_NAME部署新程序包"
cp ${WORKSPACE}/jenkins_build/${JAR_NAME} ${WORKSPACE}/${JAR_NAME}
# 4.启动服务
echo "服务启动开始..."
nohup ${JDK_PATH} -jar -Dspring.profiles.active=${spring_profile} ${WORKSPACE}/${JAR_NAME} &
echo "服务启动完毕!"
;;
Rollback) #版本回退
echo "status:$status"
echo "version:$version"
# 1.杀掉正在运行的进程
# 只能调用其他shell来kill,否则会先把jenkins查找线程给结束了,导致下面未执行
./kill.sh ${JAR_NAME}
# 2.进入备份目录,将备份拷贝到程序打包目录中,并覆盖之前的jar包
cd ${WORKSPACE}/bak/$version
cp ${JAR_NAME} ${WORKSPACE}
# 3.启动服务
echo "服务启动开始..."
nohup ${JDK_PATH} -jar -Dspring.profiles.active=${spring_profile} ${WORKSPACE}/${JAR_NAME} &
echo "服务启动完毕!"
;;
*)
exit
;;
esac
echo "清理备份包,只保留最新的7个"
cd ${WORKSPACE}/${backup_dir}/
ls -lt | awk '{if(NR>7){print "rm "$9}}' | sh
echo "清理完成"
更多推荐
所有评论(0)