小弟在接上次安装完jenkins后,现在本地部署应用,又因为要跨机器部署,所以写下这篇,以防踩坑。
一、安装插件
在插件管理中安装Publish Over SSH插件
如果打包是war包,在安装Deploy to container插件
二、配置远程信息
在系统设置中,找到publish over ssh
在ssh server点击新增
配置好远程服务器信息,点击高级,勾选“Use password authentication, or use a different key”,输入远程服务器的密码。
其中,
Name是给sshserver自定义一个名称
Hostname是ssh服务器的地址
Username是ssh服务器的用户名
Remote Directory是需要上传文件到服务器的远程目录(与流水线中的文件目录相配合
填写基本信息完成后可以点击下方的Test Configuration测试下是否连接正常,信息都正确后点击应用Apply,一个ssh服务器就配置好了)
二、配置项目流水线
在项目流水线中找到post steps
点击add server,填写相应的配置。
我的流程是:
- 先 SSH 连接,删除原进程和文件
- 再 SSH 连接,发送文件
- 执行 shell 命令
所以第一步,先删除原进程和文件
stop.sh是停止原先的服务脚步,replace.sh是要删除或者替换部署的jar包(脚本在文章末尾)
第二步,发送文件,执行shell命令
点击Add Transfer Set,进行配置
其中,
- Source files 需要打包的文件,。这里的执行路径是“/root/.jenkins/workspace/项目名称”下,在你用Maven命令打包完成后,会生成target文件夹,jar包就在里边。所以,只需要填写“target/*.jar”即可,也可以填写jar包名称“target/hunter-assets-1.0.1.jar”,因为小弟这里是springboot多模块工程,所以这里需要在加一层模块名称目录“hunter-assets/target/hunter-assets-1.0.1.jar”
- Remove prefix 需要移除的目标前缀。不需要把target文件夹也传过去,所以把target文件夹移除掉即可,只发送jar包即可。
- Remote directory 文件上传的远程服务器目录,这里的目录是之前远程服务器设置的Remote directory目录的相对目录(也就是说,小弟这里设置的目录实际上等于之前服务器设置的目录/opt/hunter加上这里设置的目录/service/java,连起来就是/opt/hunter/service/java),所以说SSH处的目标地址最好不要省略,配置根目录“/”即可。
- Exec command 到达远程服务器后执行的命令,也是我们执行启动脚本的地方。
然后,点击保存,构建流水线,查看是否构建成功
基本就算完成了。
注意:
1、文件目录一定赋予权限,否则传输文件不成功
2、启动服务,一定要后台启动,否则构建页面一直在前端等待结果
deploy.sh(启动脚本):
#!/bin/bash
#export BUILD_ID=dontKillMe这一句很重要,这样指定了,项目启动之后才不会被Jenkins杀掉。
export BUILD_ID=dontKillMe
nohup java -Dserver.port=8011 -jar /opt/hunter/service/java/hunter-assets-1.0.1.jar > jenkins.out 2>&1 &
echo '执行完了构建'
2>&1 可参考Linux下“ >/dev/null 2>&1 “相关知识说明_》/dev/null 2>&1-CSDN博客
大概意思就是,后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到jenkins.out文件中
希望自己遇到的诸多困难,能带给各位一点点小小的帮助,感谢。
附录:脚本文件
#!/bin/bash
#stop.sh
#找到正在运行旧项目的 编号
#然后停止
pid=`ps -ef | grep hunter-assets | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
kill -9 $pid
fi
#!/bin/bash
#replate.sh
#判断指定路径下的jar包是否存在
#如果存在,更名备份
#将Jenkins打包编译后的项目移动到指定的项目目录下
file="/opt/hunter/service/java/hunter-assets-1.0.1.jar"
if [ -f "$file" ]
then
#mv /opt/hunter/java/service/hunter-assets-1.0.1.jar /opt/hunter/java/service/hunter-assets-1.0.1.jar.`date +%Y%m%d%H%M%S`
rm -rf /opt/hunter/service/java/hunter-assets-1.0.1.jar
fi
echo '完成了删除文件'