Jenkins+Docker+Gitee自动化部署SpringBoot应用
共 4981字,需浏览 10分钟
· 2022-02-26
点击关注公众号,Java干货及时送达
阅读本篇文章需要你有Docker、Git、SpringBoot、Linux等基础知识。
最近在做毕业设计,遇到一个问题,就是每次编写完一个功能点,就需要重新运行一下项目,然后进行测试,而且项目比较复杂,在本地运行会占用大量的运行内存,导致开发不畅。
于是我想着使用Jenkins配合Gitee搭建一个自动化部署平台,并将代码托管到服务器上,这样减轻了本地的电脑压力,也解放了部署的流程。
搭建Jenkins平台
我们来搭建一下Jenkins平台,首先安装Docker:
# 安装yum-utils工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置阿里云的Docker Yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
# 配置开机自启动
sudo systemctl enable docker
通过以上指令即可成功安装Docker并启动,接下来通过Docker运行Jenkins:
docker run \
-d \
--rm \
-u root \
-p 8080:8080 \
-v /home/jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/develop_resource/apache-maven-3.6.3:/usr/local/maven \
-v "$HOME":/home \
jenkinsci/blueocean
执行上述指令Docker会自动拉取Jenkins的镜像并启动,因为我们要部署的是SpringBoot,所以需要准备JDK和Maven环境,不过该Jenkins镜像自带了JDK环境,只需准备一下Maven即可,首先下载Maven压缩包:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
然后解压:
tar -zxvf apache-maven-3.6.3-bin.tar.gz
解压之后千万要注意Maven所在的目录,这是我的目录:
/opt/develop_resource/apache-maven-3.6.3
将它挂载到容器的目录里,-v /opt/develop_resource/apache-maven-3.6.3:/usr/local/maven
这一条指令中的Maven目录千万记得换成自己的。现在,我们可以运行刚才的指令启动Jenkins了,通过docker ps
指令可以查看容器是否启动:
[root@10 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dfa1b8b2c7a3 jenkinsci/blueocean "/sbin/tini -- /usr/…" 15 seconds ago Up 9 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 50000/tcp condescending_meitner
容器正在运行,接下来访问一下看看,使用服务器的ip加端口8080:
管理员密码可以在Jenkins的启动日志中查看,使用
docker logs dfa1b8b2c7a3
查看日志:
![](https://filescdn.proginn.com/6fe333acd80424e2424a76ca6bbb8dad/3d4fcc57c7e747f2361f2d62388a004e.webp)
密码就是红框中的字符串,注意红框下的一段提示:
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
意思是你可以在/var/jenkins_home/secrets/initialAdminPassword
这个文件中查看到管理员密码,不过这是Jenkins容器内的目录,我们在启动Jenkins的就挂载了Jenkins的关键目录/var/jenkins_home
,宿主机目录为/home/jenkins-data
,所以可以使用如下指令查看管理员密码:
cat /home/jenkins-data/secrets/initialAdminPassword
得到密码后输入到Jenkins页面解锁Jenkins,点击安装推荐的插件:
![](https://filescdn.proginn.com/2e681df321c4ef2792db417af86df392/e382caa53dc1f8667cade4205c538841.webp)
等待插件安装完成,完成后就可以创建用户了:
![](https://filescdn.proginn.com/d9f817aeb1ce66d59c02006337d10b26/cd24246a8222e9aea307ebddd611eb05.webp)
然后下一步:
![](https://filescdn.proginn.com/4e51f9aa71e668178e89576f0003ecd0/f204a8ea74260bce0344715fa80701f5.webp)
无需修改,直接进入下一步:
![](https://filescdn.proginn.com/de331e58a7cc0016841f737fa7e95eb5/3cfab0da0486007ca3aef90911e4b54a.webp)
到这一步Jenkins平台就可以正式使用了。
Jenkins平台配置
接下来就是对Jenkins平台的配置,首先配置Maven:
![](https://filescdn.proginn.com/adb71e082ea67675a29c775ad2044b13/6052c7b2732b0b8b90333abca912e717.webp)
按步骤点击,即可进入系统配置,在全局属性中进行配置:
![](https://filescdn.proginn.com/fdc960e7024680da84b17c9b036a2238/9fef213dc45f675febd64983cbd20c3e.webp)
勾选环境变量,然后点击新增:
![](https://filescdn.proginn.com/64cbcc528fc5d25703320de9ce825ca4/a17b622b66db5eab5659e85c4e11befc.webp)
还记得我们在运行Jenkins容器时挂载的Maven目录吗?挂载到Jenkins容器中的目录就是/usr/local/maven
,如果实在搞不懂的你就保持和我的配置一样即可。以同样的方式再配置一个:
![](https://filescdn.proginn.com/41fb9befd65b6740b87bb22587c2a206/bcf66377d471c29e175ef696d4ad9951.webp)
PATH+EXTRA
的作用是让原来PATH变量中的环境不丢失,最后点击保存。
Maven配置完成后,需要配置Gitee:
![](https://filescdn.proginn.com/43f4043ee8f6badd8e2d66c9c09d0817/f8333bbc202333ff1c94d996cb443890.webp)
进入插件管理:
![](https://filescdn.proginn.com/848262d926f7c56a0ec6d0e9e4638f80/6b039785ddfbd8824f6dbc632bd3b903.webp)
点击可选插件,选中Gitee,然后点击Install without restart进行安装,等待安装完成即可,Gitee的相关配置我们放到后面讲。
创建SpringBoot应用
这一步就非常简单了,创建一个简单的SpringBoot应用进行测试,控制器代码:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "Hello World!";
}
}
配置文件:
server:
port: 8000
并在main下新建docker文件夹,在docker文件夹下新建Dockefile文件,内容如下:
# 指定是基于哪个基础镜像
FROM java:8
# 作者信息
MAINTAINER wwj
# 挂载点声明
VOLUME /tmp
# 将本地的一个文件或目录,拷贝到容器的文件或目录里
ADD /target/demo-0.0.1-SNAPSHOT.jar springboot.jar
#shell脚本
RUN bash -c 'touch /springboot.jar'
# 将容器的8000端口暴露,给外部访问。
EXPOSE 8000
# 当容器运行起来时执行使用运行jar的指令
ENTRYPOINT ["java", "-jar", "springboot.jar"]
这里需要注意的是ADD指令的编写,当SpringBoot应用打包完成后,其jar包会被放在target目录下:
![](https://filescdn.proginn.com/419aeb436ffe485aea70765b0d432744/35e09f6c8dfa8e009226b81296deea75.webp)
所以需要指定该文件的位置,使用ADD指令将其放入待构建的容器中,接着在Gitee中新建一个仓库,并将代码推送到仓库中。
![](https://filescdn.proginn.com/b71796067616eb5b230bb8fd7a4828ae/7c59517326598d6a0184e4c7a0963642.webp)
仓库名随便你叫什么,然后将刚才的应用推送上去:
![](https://filescdn.proginn.com/f714e684b29a959d910838abee6f887c/0505b81e01b1dafd463b43bf1cc16a55.webp)
Gitee配置
推送完成后,回到Jenkins管理界面,我们来完成Gitee的配置,打开系统配置:
![](https://filescdn.proginn.com/adb71e082ea67675a29c775ad2044b13/6052c7b2732b0b8b90333abca912e717.webp)
找到Gitee配置,填入对应的信息:
![](https://filescdn.proginn.com/1605b6c23b6558d400a6f962cd32101b/9961314c99186775beb0de16d1473de0.webp)
点击添加按钮添加一个Jenkins凭证:
![](https://filescdn.proginn.com/54873be3b34cd21d0a40bc0bb9eac422/503a51d86023573f6640f05df2ac7d14.webp)
选择Gitee API 令牌:
![](https://filescdn.proginn.com/443fe4d52521ea88d5fb4a2471735e2a/ee3fc3130015432abc113bfb19646dff.webp)
私人令牌的获取地址 https://gitee.com/profile/personal_access_tokens:
![](https://filescdn.proginn.com/03273fb185b00a4be41e0e781d99de6a/01f97cce19498666d129d94642991bc5.webp)
点击生成新令牌:
![](https://filescdn.proginn.com/a6f3501cdfd7d7a98d51748a42aefabe/cc5b97f0d61a911c87ba5323c7d88c6b.webp)
输入令牌描述然后点提交:
![](https://filescdn.proginn.com/1c41fc4a96ad608946b6829a85b4a4d6/7c22d5d45ee4a027ac1b6ff47ca30b2b.webp)
现在就得到了一串私人令牌,将它复制好后妥善保存,因为关闭了这个对话框就再也看不到了。凭证添加完成后,在证书令牌位置选择刚刚添加的令牌:
![](https://filescdn.proginn.com/3321886316697d78ac4fe8e299f8edcd/602938cc615ece402dd5ea2fe813c195.webp)
最后保存。
新建自动化部署任务
配置完成,接下来新建一个任务,点击新建Item:
![](https://filescdn.proginn.com/4bd5f86594be6244f1addfb796ce407d/f03f17a15ddf62c4c6a1509eb537ffd2.webp)
随便输入一个任务名称,并选择Freestyle project
:
![](https://filescdn.proginn.com/b681e75fcbfd9ce0a09c445f4bcd2ba5/0f2bc4ddb17ddf8e77c4d3503c6f8d76.webp)
在源码管理处勾选Git,并填入项目地址:
![](https://filescdn.proginn.com/cb99992fb62f19112c430beb6f6e6a59/f0be3122f70f0c2daaf008e751cb33fe.webp)
在构建触发器位置勾选它:
![](https://filescdn.proginn.com/f4412f945abb05f0d8ac0f8b87e2fdb0/c8b69d82c0f143a53f64481579f2a64c.webp)
在构建触发器最底部位置点击生成Gitee WebHook密码:
![](https://filescdn.proginn.com/83d9b81a0ea14b92bdf47e3f6cad8332/cabf5dab64a9837db8f791767421aa8b.webp)
然后打开Gitee项目中的WebHooks:
![](https://filescdn.proginn.com/70e2b4d162b5d7a04dbba23a6fac486f/f37847f56add5860c49f465321c75fdc.webp)
点击添加webHook:
![](https://filescdn.proginn.com/4cde2cd202d429ca50a8ee4a355c3c26/de1c28367c39a2c725fbff5f1fc40f61.webp)
此处的URL需要填入一个公网IP,所以如果你是用的虚拟机,就需要用内网穿透工具映射一下,如果是云服务器的就不需要了:
![](https://filescdn.proginn.com/3d7812a02b8d98611059d56b40bc6831/5062625a9862c6e55af919093a3e15ec.webp)
至于URL应该填什么,在此处有说到:
![](https://filescdn.proginn.com/d6b1ea6cc11c19afa8c33a820e66ae64/ca057f422ece23705c00def455543e1e.webp)
所以只需调换一下ip地址即可:
![](https://filescdn.proginn.com/6e1d475cd89a930565f2a5dfbb6d6ccd/e234db7cd2dd2db105351fe2946914c6.webp)
填写完成后点击添加,Gitee便会发送一个Post请求到Jenkins,如果请求结果如下所示,则配置成功了:
![](https://filescdn.proginn.com/9aca74abef8e8b41af7e6129a28d4ad5/3471e14b3e2dba08206b431d37182890.webp)
重新回到Jenkins管理界面,继续勾选构建触发器下的轮询SCM,输入轮询频率:
![](https://filescdn.proginn.com/031ef27f93702e45d03780969584c799/2af1652fa93455e15d51cd54cb357c14.webp)
最后在构建位置下增加构建步骤,选择执行shell:
![](https://filescdn.proginn.com/39a3291ba3f70dafc37669f65eb26e72/48bf12f8640d0d90fd6b32729682abc8.webp)
写入shell脚本:
![](https://filescdn.proginn.com/9471ac808c938a1e167d73bbe9fa2085/34201900f3935c3dbb1cc6026048c9b3.webp)
脚本如下:
#!/bin/bash -il
docker rm -f app_docker
sleep 1
docker rmi -f app_docker:1.0
sleep 1
mvn clean install -Dmaven.test.skip=true
sleep 1
docker build -t app_docker:1.0 -f ./src/main/docker/Dockerfile .
sleep 1
docker run -d -p 8000:8000 --name app_docker app_docker:1.0
该脚本表示删除正在运行的app_docker容器,并删除app_docker:1.0镜像,然后使用mvn命令打包从Gitee拉取来的项目代码,接着使用项目中的Dockerfile文件构建出一个镜像,名称为app_docker:1.0,最后运行该镜像。
测试一下
最后点击保存,部署任务就创建完成了,我们来测试一下有没有问题:
![](https://filescdn.proginn.com/b87ff1d4c4731d29fbd36ea78de3efb5/a8216b7c3a63da264ba1498b3023599b.webp)
点击立即构建,Jenkins会立马进行一次构建,查看控制台输出:
![](https://filescdn.proginn.com/6e57c2fd79ec2153ad5da3994f6d6712/ead59120b4e39abdb64aeed4fe7e163d.webp)
此时表名部署成功了,访问一下试试:
![](https://filescdn.proginn.com/f382682a2d1c6bbec41ed4c4e426091e/395fccebafc73c2154791a28d5e7040b.webp)
没有问题,接下来修改一下代码,并推送到Gitee,看看Jenkins会不会自动部署呢?大家可以自己尝试一下。
往 期 推 荐
点分享
点收藏
点点赞
点在看