Jenkins+Docker+Gitee自动化部署SpringBoot应用

共 4981字,需浏览 10分钟

 ·

2022-02-26 00:55

点击关注公众号,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查看日志:

image.png

密码就是红框中的字符串,注意红框下的一段提示:

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,点击安装推荐的插件:

image.png

等待插件安装完成,完成后就可以创建用户了:

image.png

然后下一步:

image.png

无需修改,直接进入下一步:

image.png

到这一步Jenkins平台就可以正式使用了。

Jenkins平台配置

接下来就是对Jenkins平台的配置,首先配置Maven:

image.png

按步骤点击,即可进入系统配置,在全局属性中进行配置:

image.png

勾选环境变量,然后点击新增:

image.png

还记得我们在运行Jenkins容器时挂载的Maven目录吗?挂载到Jenkins容器中的目录就是/usr/local/maven,如果实在搞不懂的你就保持和我的配置一样即可。以同样的方式再配置一个:

image.png

PATH+EXTRA的作用是让原来PATH变量中的环境不丢失,最后点击保存。

Maven配置完成后,需要配置Gitee:

image.png

进入插件管理:

image.png

点击可选插件,选中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目录下:

image.png

所以需要指定该文件的位置,使用ADD指令将其放入待构建的容器中,接着在Gitee中新建一个仓库,并将代码推送到仓库中。

image.png

仓库名随便你叫什么,然后将刚才的应用推送上去:

image.png

Gitee配置

推送完成后,回到Jenkins管理界面,我们来完成Gitee的配置,打开系统配置:

找到Gitee配置,填入对应的信息:

image.png

点击添加按钮添加一个Jenkins凭证:

image.png

选择Gitee API 令牌:

image.png

私人令牌的获取地址 https://gitee.com/profile/personal_access_tokens:

image.png

点击生成新令牌:

image.png

输入令牌描述然后点提交:

image.png

现在就得到了一串私人令牌,将它复制好后妥善保存,因为关闭了这个对话框就再也看不到了。凭证添加完成后,在证书令牌位置选择刚刚添加的令牌:

image.png

最后保存。

新建自动化部署任务

配置完成,接下来新建一个任务,点击新建Item:

image.png

随便输入一个任务名称,并选择Freestyle project

image.png

在源码管理处勾选Git,并填入项目地址:

image.png

在构建触发器位置勾选它:

image.png

在构建触发器最底部位置点击生成Gitee WebHook密码:

image.png

然后打开Gitee项目中的WebHooks:

image.png

点击添加webHook:

image.png

此处的URL需要填入一个公网IP,所以如果你是用的虚拟机,就需要用内网穿透工具映射一下,如果是云服务器的就不需要了:

image.png

至于URL应该填什么,在此处有说到:

image.png

所以只需调换一下ip地址即可:

image.png

填写完成后点击添加,Gitee便会发送一个Post请求到Jenkins,如果请求结果如下所示,则配置成功了:

image.png

重新回到Jenkins管理界面,继续勾选构建触发器下的轮询SCM,输入轮询频率:

image.png

最后在构建位置下增加构建步骤,选择执行shell:

image.png

写入shell脚本:

image.png

脚本如下:

#!/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,最后运行该镜像。

测试一下

最后点击保存,部署任务就创建完成了,我们来测试一下有没有问题:

image.png

点击立即构建,Jenkins会立马进行一次构建,查看控制台输出:

image.png

此时表名部署成功了,访问一下试试:

image.png

没有问题,接下来修改一下代码,并推送到Gitee,看看Jenkins会不会自动部署呢?大家可以自己尝试一下。

     

1、来自谷歌的开发心得:所有SQL和代码,都没必要藏着掖着

2、用了这么久的 Chrome,你不会还没掌握这个功能吧?

3、一个比SpringBoot快44倍的Java框架

4、QQ最近上线的两个新功能,把我人都看傻了!

5、SpringBoot 三大开发工具,你都用过么?

点分享

点收藏

点点赞

点在看

浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报