GitLab + Jenkins 自动化构建与部署Spring Boot 程序

2,652 阅读5分钟

日常开发过程中,更新程序应该是很常见的一件事。但是当服务器过多,每个服务器都需要登陆、拉取代码、打包、停止之前的进程、启动新进程就会很烦,因为你需要在每一台服务器上来重复的这些步骤。本文基于宝塔、docker、gitlab、jenkins来实现页面一键部署,首先服务器登陆后安装宝塔。

环境准备

宝塔

#   使用root用户登陆后,安装宝塔
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && bash install.sh

安装完成后会出现如下图页面,只需按照下面地址、用户名及密码即可登陆宝塔页面。

WechatIMG129.jpeg

docker

宝塔安装完成后,如图,在软件商店中搜索docker点击安装就可以了,不需要自己再去百度安装命令啊之类的,不要太方便。

1666163372996.jpg

jenkins

jenkins相比较安装宝塔、docker还是要麻烦些的,这里就不多做其他描述 传送门,点击【传送门】跳转到一篇专门写centos7安装jenkins的文章,写的蛮详细的。

jenkins安装完成后,有一些配置需要提前配置好,避免后面使用的时候报错。点击菜单【系统管理】,找到【系统配置】后在里面配置域名、git地址、要部署服务器的登陆信息等,如图

1.jpg 配置jenkins URL和管理员邮箱 image.png 配置gitlab地址

image.png 配置服务器登陆信息,可选择密码登录或者免密登录

image.png 免密登录的话要生成key,和key存放的目录

image.png 配置好后点击【全局工具配置】,配置jdk地址信息。

image.png

image.png

宝塔添加站点

通过宝塔创建于配置部署后要访问的站点,站点文件目录用于存放构建后的部署使用的Jar包

建立站点

image.png 填写好预先准备好的域名,默认使用80端口。如果有备注需要则可以填写,填写完成提交后,其中【根目录】就是最后构建后的程序包存放位置。

反向代理配置

对外统一使用80端口映射到服务器內的指定程序端口,屏蔽复杂端口号便于访问

image.png

image.png 如果需要额外配置,点击配置文件进行修改并保存即可。

设置服务自启动

进入/etc/systemd/system目录,新建系统服务文件,命名规则:[程序字母简称][平台类型][环境类型].service,在文件中写入如下内容。

[Unit]
# 服务描述
Description=file api test service
[Service]
# 执行目录
WorkingDirectory={执行目录}
# 创建私有的内存临时空间
PrivateTmp=true
# 重启行为,always表示不管是什么退出原因,总是重启
Restart=always
# 服务类型,默认为simple表示指定ExecStart启动进程为主进程
Type=simple
# 启动命令
ExecStart={启动命令,如java:java -jar demo.jar}
# 终止命令
ExecStop=kill -15 $MAINPID
# 重启命令
ExecReload={重启启动命令,如java:kill -15 $MAINPID && java -jar demo.jar}

[Install]
# 服务安装设置,用于开机自启用
WantedBy=multi-user.target

执行命令重载系统服务使服务生效并设置开机自启

# 重载系统服务
systemctl daemon-reload
# 设置开机自启
systemctl enable [服务名称].service
# 取消开机自启
systemctl disable [服务名称].service

Jenkins构建配置

首先点击【新建任务】输入任务名称构建一个maven任务,如果有类似项目可通过下方【复制】功能,填写已存在任务引用相应任务即可快速创建任务,后续通过调整具体配置完善任务配置。

点击确定进入配置页面,进行通用配置。可在描述中填写信息,描述任务;也可在Jenkins小助手中配置构建结果推送

image.png

点击【源码管理】,配置gitlab的地址,有需要的话可以配置选择凭证用来授权访问gitlab;配置好分支,会在构建时拉取指定分支代码,采用tag参数形式部署的话,可在指定分支处改为:refs/tags/${TAG}

1667464562145.jpg

点击【构建触发器】,勾选【Generic Webhook Trigger】表示当前构建均使用webhook方式提供构建触发点;在Variable中设置变量,以便从请求中获取到指定的参数赋值给该变量,用于后续过滤指定分支;Expression中选择JSONPath,从请求参数中指定路径获取分支值;在Token中定义token,指定只有携带相同token的请求才触发该任务

image.png

WeChatd3208145d1700f388a20a29d16219f87.jpg

点击【Optional filter】配置只有符合条件的分支触发才执行当前构建任务,在Expression配置过滤表达式,仅当参数匹配为指定表达式时触发构建;在Text中配置前步请求参数变量名称,使用$符号开头接变量名。

image.png

点击【Pre Steps】配置工程编译打包命令,在Root POM中指定工程POM文件名称;在Goals and options中指定工程编译命令;如是多模块可install 后加 -pl [模块名] -am; 关键参数说明: -pl 该参数表示指定需要编译打包的模块,-am 表示同时处理前面所选模块所选依赖模块,否则可能导致依赖丢失,-Dmaven.test.skip=true 该参数表示跳过单元测试;

image.png

如果构建需要发送邮件通知的话,则点击【构建设置】,在E-mail配置邮件。如图:

image.png

配置构建后推送程序包并执行指定命令对程序进行操作,点击【构建后操作配置】

image.png

  1. 添加Send build artifacts over SSH
  2. 新增SSH Service发布类型
  3. 在Name中选择要连接的远端服务器,在前面已配置
  4. 在Source files配置编译后程序包在源代码中的存放目录,多模块需要指定模块名
  5. 在Remove prefix指定文件名称部分要移除的内容,否则程序包名称会加上这一段,多模块需要指定模块名
  6. 在Remote directory指定程序包要推送远端服务器的目录,在宝塔配置步骤已配置,注意,该路径为服务器对应的绝对路径
  7. 在Exec command中配置执行预置在远端服务器的系统服务,用来启停程序,在宝塔配置中【设置服务自启动】中,通过systemctl stop [服务名] systrmctl start [服务名] 两条命令

GitLab项目Webhook配置

使用GitLab源代码管理的Webhook特性,在源代码分支进行Merge时向Jenkins发送程序构建请求,进行程序自动化构建部署。
在gitlab settings中找到Webhook,在URL中填写Jenkins触发器指定URL,此处暂时无法填写域名;在Secret Token填写Jenkins构建任务中预设好的Token;在Trigger中勾选事件触发hook,点击Add webhook就行了

image.png 接下来就可以测试配置好的jenkins是否生效了,如未生效,可先到服务器目录看Jar包是否已经推送至该目录下,没有则检查构建、推送的配置,如有jar包,则检查宝塔服务配置。