简介
本次同小伙伴们分享使用 Jenkins + Gilab + Maven 来自动化部署一个 Spring Boot 应用,架构图如下:
该 Spring Boot 应用是一个简单的商品后台管理应用,采用了 Spring Security + JWT + MySql, 前端采用了 React 构建,放在 classpath:/resources/static 目录下,商品图片上传到本地目录下通过 nginx 代理访问。后端代码结构如下:
环境准备
本次自动化构建准备环境如下:
- 安装 CentOs7 VM1, IP: 192.168.43.206(1 核 2G)
- 安装 CentOs7 VM2, IP: 192.168.43.208(1 核 3G)
- 安装 JDK1.8(192.168.43.206)
- 安装 Git(192.168.43.206)
- 安装 Maven(192.168.43.206)
- 安装 Mysql(192.168.43.206)
- 安装 Jenkins(192.168.43.206)
- 安装 Tomcat(192.168.43.206)
- 安装 Nginx(192.168.43.206)
- 安装 Gitlab-CE(192.168.43.208)
使用 FinalShell 连接这两台 VM。
关于具体安装,这些网上都有许多详细的教程,不再具体展开安装说明。
nginx 配置
配置 nignx 代理图片路径
user root;
# 图片映射路径
location /image {
root /root;
# 打开目录索引
autoindex on;
}
nginx 启动关闭
# 启动 nginx
/usr/local/nginx/sbin/nginx
# 停⽌Nginx服务,可执⾏
/usr/local/nginx/sbin/nginx -s stop
# 如果修改了配置⽂件后想重新加载Nginx,可执⾏:
/usr/local/nginx/sbin/nginx -s reload
# 注意其配置⽂件位于:
/usr/local/nginx/conf/nginx.conf
Tomcat 配置
配置 Tomcat 用户角色权限
默认情况下 Tomcat 是没有配置用户角色权限的
但是后续 Jenkins 部署项目到 Tomcat 服务器,需要用到 Tomcat 的用户,所以修改 tomcat 以下配置, 添加用户及权限
vim /usr/local/tomcat/apache-tomcat-8.5.55/conf/tomcat-users.xml
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="hank" password="hank123" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>
注意:为了能够刚才配置的用户登录到 Tomcat,还需要修改以下配置
vim /usr/local/tomcat/apache-tomcat-8.5.55/webapps/manager/META-INF/context.xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
把上面这行注释掉即可!
配置快捷操作和开机启动
⾸先进⼊ /etc/rc.d/init.d ⽬录,创建⼀个名为 tomcat 的⽂件,并赋予执⾏权限
cd /etc/rc.d/init.d/
touch tomcat
chmod +x tomcat
接下来编辑 tomcat ⽂件,并在其中加⼊如下内容:
# !/bin/bash
# chkconfig:- 20 90
# description:tomcat
# processname:tomcat
JAVA_HOME=/usr/local/java/jdk1.8.0_161
export JAVA_HOME
TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.5.55
export TOMCAT_HOME
case $1 in
start) su root $TOMCAT_HOME/bin/startup.sh;;
stop) su root $TOMCAT_HOME/bin/shutdown.sh;;
restart)
$0 stop
$0 start;;
*) echo "Usage: service tomcat start|stop|restart";;
esac
这样后续对于 Tomcat 的开启和关闭只需要执⾏如下命令即可:
service tomcat start
service tomcat stop
service tomcat restart
启动 Gitlab-CE
gitlab-ctl start
访问登录本地 gitlab:http://192.168.43.208/, 创建 shop-manager-backend 项目,上传本地代码到该仓库
Jenkins 配置
systemctl start jenkins
启动 Jenkins, 访问登录本地 Jenkins: http://192.168.43.206:8500/, Jenkins 插件通常安装不了,可参考我另一篇博文安装插件, 这里我已经安装好了。
全局工具配置
在 Jenkins -> Global Tool Configuration 下, 配置 JDK, Git, 和 Maven
添加 Jenkins 全局变量
在 Jenkins -> Configure System 下,添加全局变量
添加 Gitlab API Token
在 Jenkins -> Configure System 下,添加 API Token
新建一个自由风格项目
General
GitLab Connection: 选择前面添加的 Gitlab API Token
源码配置:
Repository URL: git@192.168.43.208:yekongle/shop-manager-backend.git
Credentials: 配置一个访问 gitlab 的凭据
构建触发器配置
主要是要配置一个 webhook,这个 webhook 会触发 jenkins 拉取 gitlab 上的代码
构建
通过 maven 构建项目,写 maven 的构建命令
构建后操作
构建完毕后,将生成的项目 war 包放到 tomcat 容器中运行
这里的 Credentials 选择事先添加好的访问 Tomcat Web 应用程序管理的账号密码凭据
部署测试
当有代码提交到 master 分支时,jenkins 就会重新构建部署该项目
查看控制台输出如下,可以看到重新构建的 war 包被部署到了 Tomcat 下:
进入 Tomcat 应用管理控制台,可看到该应用并且已经启动了
访问该项目
输入账号密码登录
后端项目代码已上传至 Github: https://github.com/yekongle/springboot-code-samples/tree/master/shop-manager-backend , 希望对小伙伴们有帮助哦。
参考链接
- React 前端: https://www.bilibili.com/video/BV1eE411W7bb?p=18&t=34