0%

使用 Jenkins 构建、部署 Spring Boot 应用

折腾了好久,终于实现了用 Jenkins 部署 Spring Boot的应用,这里将具体过程记录一下,供大家参考。

准备环境

CentOS 7.6
JDK 1.8
Maven 3.6.0
git 1.8.3.1

如上环境只是我本地的,不一定要完全一样

安装 Jenkins

参考 CentOS 7 安装 Jenkins

全局工具配置

打开系统管理 -> 全局工具配置

jenkins-deploy-springboot-manage

分别配置JDKGitMaven的路径,根据你的实际路径来填写

jenkins-deploy-springboot-global-tool-jdk

jenkins-deploy-springboot-global-tool-git

jenkins-deploy-springboot-global-tool-maven

配置完成后点击保存

安装插件

有很多插件都是选择的默认的安装的,所以目前只需要再手动安装 Maven IntegrationPublish Over SSH 这两个插件。

打开 系统管理 -> 插件管理
选择 可选插件
勾选中 Maven IntegrationPublish Over SSH
点击 直接安装

jenkins-deploy-springboot-plugin-1

在安装界面勾选上安装完成后重启 Jenkins

jenkins-deploy-springboot-plugin-2

添加 SSH Server

SSH Server 是用来连接部署服务器的,用于在项目构建完成后将你的应用推送到服务器中并执行相应的脚本。

打开 系统管理 -> 系统配置,找到 Publish Over SSH 部分,选择新增

jenkins-deploy-springboot-ssh-server-add

点击 高级 展开配置

jenkins-deploy-springboot-ssh-server-basic

最终配置如下

jenkins-deploy-springboot-ssh-server-advanced

配置完成后可点击 Test Configuration 测试连接,出现 succes 连接成功

添加凭据

凭据 是用来从 Git 仓库拉取代码的,打开 凭据 -> 系统 -> 全局凭据 -> 添加凭据

jenkins-deploy-springboot-auth

我是用 SSH 密钥来做凭证的,所以我的配置如下

jenkins-deploy-springboot-ssh-key

部署服务器的准备工作

部署服务器上,需要一些准备工作:
1、创建文件夹 /home/ec2-user/jenkins-in, 其中ec2-user 是前面在配置 SSH Server 时指定的用户名
2、创建脚本 /home/ec2-user/jenkins-in/deploy.sh,将如下内容复制进去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/usr/local/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

DATE=$(date +%Y%m%d%H%M)
JENKINS_IN=/home/ec2-user/jenkins-in
DIR=/data/workspace/segon-test
JARFILE=segon-test.jar

if [ ! -e $JENKINS_IN/$JARFILE ]; then
exit 2
fi

if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR

# 如果程序已经在运行,就杀掉进程
pid=`ps -ef | grep $JARFILE | grep -v "grep" | awk '{print $2}'`
if [ "$pid" != "" ]; then
echo "App is running and pid = $pid, will kill it"
kill -9 $pid
fi

# 备份旧的应用
mv $JARFILE backup/$JARFILE.$DATE

# 将新的应用移动到工作目录
mv -f $JENKINS_IN/$JARFILE .

# 运行新的应用
nohup java -jar $DIR/$JARFILE > out.log 2>&1 &

# 等待一段时间,然后输出log,检查是否启动成功
if [ $? = 0 ];then
sleep 10
tail -n 50 out.log
fi

# 只保留最新的5个备份
cd backup/
ls -lt | awk 'NR>5{print $NF}' | xargs rm -f

这段脚本的作用就是Kill旧项目、备份老项目、拷贝新项目、执行新项目,别忘了给可执行权限

1
chmod +x deploy.sh

新建 Maven 任务

创建

新建任务 -> 构建一个maven项目

jenkins-deploy-springboot-new-job

源码管理

在源码管理中,选择Git,填写仓库地址,选择之前添加的凭证

jenkins-deploy-springboot-new-job-git

构建环境

勾选 Add timestamps to the Console Output,代码构建的过程中会将日志打印出来
jenkins-deploy-springboot-new-job-console

Build

在Build中,填写 Root POMGoals and options,也就是你构建项目的命令

jenkins-deploy-springboot-new-job-maven

Post Steps

选择Run only if build succeeds,添加 Post 步骤,选择 Send files or execute commands over SSH

jenkins-deploy-springboot-new-job-post

jenkins-deploy-springboot-new-job-post-2

name 选择前面添加的 SSH Server
Source files 要推送的文件,
Remove prefix 文件路径中要去掉的前缀,
Remote directory 要推送到目标服务器上的哪个目录下,
Exec command 目标服务器上要执行的脚本

上面填写的 jenkins-in以及jenkins-in/deploy.sh 都是在 部署服务器的准备工作 步骤准备好的

构建任务

点击 立即构建 可以开始构建任务,控制台可以看到log输出,如果构建失败,在log中会输出原因
jenkins-deploy-springboot-run