一、系统环境
以下环境皆为必要系统环境;以下环境皆为我测试机的环境,实际操作不一定要如此高的版本
- Ubuntu 20.04LTS
- Java 8
- Maven 3.6.3
- Docker 19.03.13
- Jenkins 2.249.3
- git 2.25.1
二、创建一个简单的Spring Boot项目
1、创建项目
使用IDEA等创建一个简单的Spring Boot项目,注意下面标红的几个点
然后创建一个类Hello0Controller
,添加如下代码
1 |
|
此时,运行这个项目,访问http://localhost:port/hello?str=world
以得到一串字符串hello world
。以此来测试项目是否创建成功,是否运行成功。
2、打包项目
在 项目根目录处运行指令mvn package
,对这个项目进行打包,正常情况下,项目会生成target文件夹,文件夹下的xxx-0.0.1-SNAPSHOT.jar
即为打包生成的可执行jar包(xxx为项目的artifactId
)
为了测试打包的jar包是否正确,我们可以使用指令执行该jar包,然后进行访问查看效果。执行指令如下
1 | cd targer/ |
访问http://localhost:port/hello?str=world
以得到一串字符串hello world
。以此来测试项目是否创建成功,是否运行成功。
3、将该项目上传到GitHub
省略……
三、使用Jenkins自动部署Spring Boot项目
我们先不使用Docker,直接用Jenkins部署这个SpringBoot项目。
先来统计一下,我们用到的指令如下
1 | git clone https://github.com/xxx.git |
如果我们自己在服务器终端,直接运行以上几个指令即可在服务器运行起我们的SpringBoot项目。Jenkins其实也只是将这些指令集成一下,做到一键即可部署。
1、安装、运行Jenkins
建议直接看文档进行安装:Jenkins官网
安装完后运行时安装插件选择推荐插件即可,遇到的大部分Jenkins问题都可自行搜索解决。
2、配置环境
访问服务器运行的Jenkins主页,选择Manage Jenkins -> Global Tool Configuration,进入到全局环境变量配置,将需要配置的环境(Java、Maven、Git)填入即可。
3、在Jenkins上新建项目
访问服务器运行的Jenkins主页,选择“新建Item(New Item)”
然后输入该项目名称,并选择“流水线”后,点击确定新建项目
4、编写自定义流水线
点击确定按钮以后,跳转到配置页面,在配置页面,我们只用关心流水线脚本,其余配置若感兴趣可自行查阅其作用。
对于pipeline语法可以浏览官网进行学习,本篇文章所使用的都是简单的指令。本篇文章的脚本如下(注意根据自己的项目进行修改)
1 | pipeline { |
5、一键构建
进入到项目页面,点击按钮“Build Now”即可构建
下面是构建完成的截图
注意这里由于我们的指令问题,是不会构建完成,而是卡在运行项目这里,点击左下角#12
左边的圆圈按钮即可查看输出信息
到此,Jenkins配合Spring Boot实现自动化部署已经完成,每次上传完代码以后直接点击BuildNow按钮即可重新部署。但是,目前运行项目这个步骤一直无法完成,这个问题有两个解决办法:
- 使用
nohup java -jar xxx.jar &
指令,但是如果使用这个指令需要用单引号包住这个指令且jar文件需要是绝对路径,感兴趣可以尝试一下。 - 使用Docker构建镜像并运行镜像
四、配合Docker
为了解决上述问题,我们引入Docker。引入Docker不光是为了解决上面那个问题,容器化已经是大势所趋,具体使用Docker有哪些好处可以自行搜索。
1、Docker将Spring Boot项目打包成镜像
Docker对Spring Boot项目打包的方式有很多种,这里我参考官方推荐的一种,参考网址:https://spring.io/guides/gs/spring-boot-docker/
新建Dockerfile
在项目根目录新建一个名为Dockerfile的文件,注意没有后缀名,其内容如下
1 | FROM java:8 |
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
在本地构建镜像(测试用,可跳过)
如果你本地有Docker环境的话,可以在本地进行构建镜像。
在项目根目录运行指令docker build -t spring-demo .
即可
运行该镜像的话,只用执行指令docker run -d -p 8080:8080 spring-demo
即可,8080:8080
指本地端口8080(第一个)映射到容器端口8080(第二个)
2、将Dockerfile上传到GitHub
省略….
3、修改pipeline脚本
修改后的脚本如下
1 | pipeline { |
5、一键构建
先将没有集成Docker的那个构建停止,然后重新点击BuildNow即可
以上,Jenkins+Docker+SpringBoot的自动部署就实现完成了,我的项目代码地址:https://github.com/pangyuworld/spring-demo 仅供参考