前言
本篇文章以本地 Mac 搭建的 Jenkins 为背景,实现本地通过 Jenkins 打包并传到远程服务器并重启 jar 包。
安装插件
首先我们需要在插件管理中安装 Publish Over SSH
插件
安装好后在系统配置中找到 Publish Over SSH
配置项
这里开头的 Passphrase 是通用密码,表示以下添加的服务器,若没填密码,则都是用该密码。
接下来配置服务器连接信息
然后点击高级,可以单独设置该服务器的密码:
设置完之后,点击保存。
全局工具配置
配置JDK
Centos 的 JDK_HOME 如果不知道在哪里,可以通过 echo $JAVA_HOME
命令查看
配置 maven
由于我之前没有在服务器上安装 maven,所以我这里选择自动安装
配置项目
在配置项目的构建环境中选择 Send files or execute commands over SSH after the build runs
这个选项表示在构建部分执行完之后,在执行上传到远程服务器等操作
参数解释
- Source files
- 默认是 Jenkins workspace 的工作目录,就是当前项目的根目录,这个路径指向的是你想要上传到远程服务器的文件路径
- Remove prefix
- 去除上层目录,若不去除,Jenkins 会根据 Source files 的目录层层创建到 Remote directory 中
- Remote directory
- 要上传到远程服务器的目录,该目录是相对于系统配置中配置了该服务器的 Remote directory 开始查找。
- Exec command
- 在远程服务器中执行脚本,这个地方就可以用来写一些 shell 脚本,来关闭 SpringBoot 服务的端口,在重启 SpringBoot 服务。
当配置完之后,我们就可以构建查看效果了。
shell
这里贴出一些简单的 操作 Springboot 关闭、启动的脚本
# killPort.sh
#!/bin/bash
port=9004
lsof -t -i:$port
if [ $? -ne 0 ]; then
echo 该端口未运行
else
kill -9 `lsof -t -i:$port`
if [ $? -ne 0 ]; then
echo $port端口关闭失败
else
echo $port端口关闭成功
fi
fi
# startSpringBoot.sh
#!/bin/sh
cd /home/call-show-api
chmod -R 777 app-1.0-SNAPSHOT.jar
java -Xms128m -Xmx128m -XX:PermSize=128M -XX:MaxPermSize=128M -jar app-1.0-SNAPSHOT.jar
可以将 shell 文件放到 /home/call-show-api
中,
然后在 Exec command 中写入
cd /home/call-show-api
sh killPort.sh
# nohup 不能在 sh 中用,否则会无法启动 Springboot 进程,答案是参考这篇文章的最后一段:https://www.jianshu.com/p/a7d7df97fe4b
nohup sh startSpringBoot.sh > /dev/null 2>&1 &