小弟在接上次安装完jenkins后,现在本地部署应用,又因为要跨机器部署,所以写下这篇,以防踩坑。

一、安装插件

在插件管理中安装Publish Over SSH插件

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jar

如果打包是war包,在安装Deploy to container插件

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jar包_02

二、配置远程信息

在系统设置中,找到publish over ssh

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_java_03

在ssh server点击新增

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jar包_04

        配置好远程服务器信息,点击高级,勾选“Use password authentication, or use a different key”,输入远程服务器的密码。

其中,

        Name是给sshserver自定义一个名称

        Hostname是ssh服务器的地址

        Username是ssh服务器的用户名

        Remote Directory是需要上传文件到服务器的远程目录(与流水线中的文件目录相配合

填写基本信息完成后可以点击下方的Test Configuration测试下是否连接正常,信息都正确后点击应用Apply,一个ssh服务器就配置好了)

二、配置项目流水线

在项目流水线中找到post steps

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jar_05

点击add server,填写相应的配置。

我的流程是:

  • 先 SSH 连接,删除原进程和文件
  • 再 SSH 连接,发送文件
  • 执行 shell 命令

 所以第一步,先删除原进程和文件

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jar_06

stop.sh是停止原先的服务脚步,replace.sh是要删除或者替换部署的jar包(脚本在文章末尾)

第二步,发送文件,执行shell命令

点击Add Transfer Set,进行配置

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jar_07

其中,

  • 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 到达远程服务器后执行的命令,也是我们执行启动脚本的地方。

 然后,点击保存,构建流水线,查看是否构建成功

jenkins pre steps 无法执行远程脚本 jenkins部署远程服务器_jenkins_08

基本就算完成了。

注意:

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,然后将标准输出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 '完成了删除文件'