1.准备jenkins环境
2.准备插件
安装插件
Maven Integration(jenkins集成maven的插件,用于添加《构建一个maven项目》的菜单)
Publish Over SSH(用于连接远程服务器)
Deploy to container(用于把打包的应用发布到远程服务器)
3.添加远程代码部署服务器
4.配置 maven 和 jdk
注意:配置的路径都是jenkins机器,非远程代码部署机器
- maven settings文件配置
- jdk配置(java home)
- maven配置
5.添加要构建的项目
选择构建一个maven项目,确认,即可开始配置项目参数(前面安装的插件)
-
添加 Git 仓库(这里我用的公共仓库,私有仓库需要添加域和用户信息)
-
构建触发器
-
配置maven命令
-
发布到远程服务器的配置(下面还有个exec command,项目启动的脚本,稍后配置)
-
启动脚本
#!/bin/bash port=9898 #项目启动端口 echo "check $port" grep_port=`netstat -tlpn | grep "\b$port\b"` echo "grep port is $grep_port" if [ -n "$grep_port" ] then echo "端口 $port 在使用" netstat -nlp |grep :9898 |grep -v grep|awk '{print $7}' |awk -F '/' '{print $1}' |xargs kill -9 echo "kill 掉$port 端口" else echo "端口没有被使用" fi echo "开始重启" # 此处要加BUILD_ID=dontKillMe 否则jenkins不会将项目启动下去 BUILD_ID=dontKillMe nohup java -jar /home/jenkins_deploy/xxx/xxx-0.0.1.jar & echo "jenkins 自动化部署成功"
需要注意的点:在部署多台机器的时候,可能会出现状态为 unstable 的状态,错误提示为
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000ms]
阻塞了后面的机器继续发布和启动,需要在配置远程机器的高级配置里勾上 Exec in pty 如下图
添加了这个配置后,虽然结果提示Finished:success,但是项目没有启动
需要在脚本里添加sleep 1即可成功启动#!/bin/bash port=9898 #项目启动端口 echo "check $port" grep_port=`netstat -tlpn | grep "\b$port\b"` echo "grep port is $grep_port" if [ -n "$grep_port" ] then echo "端口 $port 在使用" netstat -nlp |grep :9898 |grep -v grep|awk '{print $7}' |awk -F '/' '{print $1}' |xargs kill -9 echo "kill 掉$port 端口" else echo "端口没有被使用" fi echo "开始重启" # 此处要加BUILD_ID=dontKillMe 否则jenkins不会将项目启动下去 BUILD_ID=dontKillMe nohup java -jar /home/jenkins_deploy/xxx/xxx-0.0.1.jar & echo "jenkins 自动化部署成功" sleep 1
6.启动和日志输出
配置完成后回到项目内
点击build now 下面出现当前次构建的进度,点击进去就能看到构建的详情了
日志文件(这里分别部署到了两台远程机器,两个不同的端口9898和9899)