Jenkins真的很牛逼!只是大部分人不会用而已~
mall学习教程官网:macrozheng.com
背景
新项目没有完善的部署流程,只能自己先搭一套来顶一顶了。
服务器资源如下:
原理图如下所示:
- Jenkins 部署在一台服务器上,然后安装了很多必备的 Jenkins 插件。比如拉取 Gitlab 仓库代码的插件、远程执行命令和拷贝文件的插件。
- Jenkins 开始运行一个任务时,通过 Git 插件从 Gitlab 仓库拉取代码到本地目录。
- Jenkins 通过 JDK 和 Maven 工具对 Java 代码进行打包部署。
- Jenkins 通过 SSH 插件执行远程命令,将包进行备份、清理操作。
- Jenkins 将 JAR 包拷贝到远程服务器的固定目录下。
- Jenkins 执行远程命令,更新服务。
这或许是一个对你有用的开源项目,mall项目是一套基于 SpringBoot3 + JDK 17 + Vue 实现的电商系统(Github标星60K),采用Docker容器化部署,后端支持多模块和微服务架构。包括前台商城项目和后台管理系统,能支持完整的订单流程!涵盖商品、订单、购物车、权限、优惠券、会员、支付等功能!
- Boot项目:https://github.com/macrozheng/mall
- Cloud项目:https://github.com/macrozheng/mall-swarm
- 视频教程:https://www.macrozheng.com/video/
项目演示:
Jenkins 简易安装教程
Jenkins 官方网站对 Jenkins 如何安装已经讲解得非常清晰了,所以这里不再赘述,贴一下官方网站,自行去看吧。
Jenkins 下载地址:
https://www.jenkins.io/download/
Jenkins 安装步骤:
https://www.jenkins.io/doc/book/installing/
安装完成后,我们需要配置 Jenkins。
配置 Jenkins
因为我们要打包部署的项目是 Java 项目,所以需要将 Java JDK 所在的目录和 Maven 所在目录配置到 Jenkins 中,这样 Jenkins 打包时就能利用这两个工具进行打包。
配置全局工具:Maven
配置如下:
配置环境变量:
- Java JDK
- Maven
上面的配置完成后,我们就可以测试下是否可以将代码仓库中的某个分支的代码拉取下来进行打包。
通过 Jenkins 一键部署
在使用 Jenkins 时,我们必须创建一个任务才行,然后这个任务里面可以配置要执行的各种操作。
Jenkins中自动构建项目的类型有很多,常用的有以下三种:
- 自由风格软件项目(FreeStyle Project)
- Maven项目(Maven Project)
- 流水线项目(Pipeline Project)
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在
实际开发中可以根据自己的需求和习惯来选择。
下面演示创建一个简单的自由风格项目来完成项目的集成过程:
拉取代码->编译 Java 项目->备份服务器 JAR 包->删除服务器 JAR 包->拷贝 JAR 包到服务器->更新服务。
创建一个项目
创建成功后就会出现一条记录:
为了测试我们的 Jenkins 是否能正常拉取代码并打包,我们需要配置 Gitlab 代码仓库的地址、用户名、密码。
配置拉取的代码仓库
- 仓库 URL
- 用户名和密码
配置打包
echo "开始打包"
mvn clean package
echo "打包完成"
配置到这一步后,我们可以先验证下这些配置是否生效。
运行项目
在 Dashboard 可以看到配置完成的任务,点击 Build Now 按钮即可开始拉取代码、打包项目。
我们还可以从控制台输出看到打包记录。
Jenkins 会从 Gitlab 仓库拉取指定分支的代码,然后运行 mvn clean package 命令,进行打包。
输出记录中打印出了以下关键信息:代码拉取后存放在哪,打的 jar 包在哪。
代码和生成的 jar 包在到这个根目录找到:
C:\ProgramData\Jenkins.jenkins\workspace\passjava-dev
还可以从打印日志的最后看到这次打包用时 2 min 33 秒,任务的执行状态为 Finished Success。
接下来就是将这些 JAR 包拷贝到远程服务器地址。
拷贝安装包
安装插件
拷贝安装包需要用到一个插件:Publish Over SSH。
Dashboard>Manage Jenkins->插件管理->Avaliable plugins。
下图是已经安装好了这款插件的截图。
配置这个插件的全局配置:
- SSH Server Name:远程服务器的名字,后面在配置拷贝包的时候可以根据名字选择拷贝到哪台服务器。
- Hostname:SSH Server 的 Hostname。
- Username:SSH Server 登录名和密码或密钥。
- Remote Directory:指定将文件拷贝到哪个目录。
备份服务器 JAR 包
在上传打包好的 JAR 包之前,需要将应用服务器上的 JAR 备份。
备份的步骤如下:
- 在远程服务器创建一个备份目录
bak
。 - 在备份目录
bak
上创建一个以当前时间作为目录名的目录。 - 将远程服务器的上 JAR 重命名为原文件名+时间戳的名字。
拷贝 JAR 包到远程服务器
需要配置以下内容:
- SSH Server:指定要将文件拷贝到哪个服务器,格式为 <用户名>@<ip 地址>。
- Transfer Set Source files:jenkins 编译后的 JAR 地址。通过之前的编译信息我们知道,JAR 包地址在如下路径:
C:\ProgramData\Jenkins.jenkins\workspace<Jenkins 任务名><编译目录>
- Remove prefix:要移除的文件路径前缀。
- Remte directory:拷贝到哪个路径下,如果之前已经配置过全局的文件夹,则拷贝的文件会放到 <全局文件夹>/之下,如果全局文件夹之下没有这个
Remote directory
目录,则创建一个。这里我们不需要配置,全局配置已经可以满足条件了。 - 如果还有其他 JAR 包也需要拷贝则需要再添加一项。
滚动更新服务
项目采用的 Docker Swarm 方式来管理集群中的微服务。
Jenkins 通过 插件 发送命令到应用服务器上执行指定的脚本
cd /nfs-data/wukong/
nohup sudo sh restart.sh
exit
这个命令使用
nohup
和 sudo
权限来执行名为 restart.sh
的脚本。nohup
命令用于将脚本在后台运行,即使终端会话结束,脚本仍然继续运行。远程服务器上创建脚本
如果想要 jenkins 执行远程服务器上的脚本,则需要先在远程服务器上创建一个可执行的脚本。
这里我们需要重启服务器的容器服务,所以在这个目录 /nfs-data/wukong/ 编写一个 restart.sh 脚本。
echo "部署 passjava 服务"
nohup sudo docker service update accountservice --force > /nfs-data/wukong/jenkins/account.txt
nohup sudo docker service update gatewayservice --force > /nfs-data/wukong/jenkins/gateway.txt
nohup sudo docker service update qmsservice --force > /nfs-data/wukong/jenkins/qms.txt
这个命令使用
--force
选项来更新名为"accountservice、gatewayservice、qmsservice"的 Docker 服务。命令的输出被重定向到文件/nfs-data/wukong/jenkins/xxx.txt
中。部署
再次测试是否能正确编译代码,上传 jar 包,部署微服务。
部署结果如下:Finished: SUCESS
Github上
标星60K
的电商实战项目mall,全套 视频教程(2023最新版) 已更新完毕!全套教程约40小时,共113期
,通过这套教程你可以拥有一个涵盖主流Java技术栈的完整项目经验
,同时提高自己独立开发一个项目的能力
,下面是项目的整体架构图,感兴趣的小伙伴可以点击链接 mall视频教程 加入学习。整套 视频教程 的内容还是非常完善的,涵盖了mall项目最佳学习路线、整体框架搭建、业务与技术实现全方位解析、线上Docker环境部署、微服务项目学习等内容,你也可以点击链接 mall视频教程 了解更多内容。
推荐阅读
- 全面升级!一套基于Spring Boot 3+JDK17的实战项目!
- 69K Star!这是我见过最强的开源电商系统 !!
- Github标星60K!一套完整的项目实战教程来了,主流Java技术一网打尽!
- 看了我项目中购物车、订单、支付一整套设计,同事也开始悄悄模仿了...
- 支付系统就该这么设计,稳的一批!
- 权限系统就该这么设计,稳的一批!