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

简介: 阅读本篇文章需要你有Docker、Git、SpringBoot、Linux等基础知识。
阅读本篇文章需要你有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:
image.png
管理员密码可以在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

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会不会自动部署呢?大家可以自己尝试一下。

目录
相关文章
|
XML jenkins 机器人
JMeter+Ant+Jenkins实现接口自动化测试持续集成
本文介绍了如何使用Ant生成JMeter接口测试报告,并集成到Jenkins中实现自动化测试。内容涵盖Ant与JMeter环境配置、build.xml文件设置、测试执行及报告生成,同时包括Jenkins插件安装、项目配置和钉钉消息通知的集成,帮助实现持续测试与结果可视化。
1474 0
|
Kubernetes jenkins 持续交付
Artifact Hub在Kubernetes中的应用:部署Jenkins的脚本整理
以上步骤断言清晰明确地描述了如何通过Artifact Hub 使用Helm图表来部署Kubernetes 中得Jenkis 实例,并且提供了相应得Shell 脚本作为执行指南. 这样不但能够帮助用户快速地进行操作, 同时也能够通过自定义参数来满足不同用户需求.
376 5
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1317 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
监控 jenkins 测试技术
Ansible与Jenkins:自动化工具的对比
Ansible和Jenkins是自动化领域的两大巨头。Ansible专注于配置管理和任务自动化,采用无代理架构,使用YAML定义配置,具有幂等性和可扩展性。Jenkins则擅长持续集成和持续交付(CI/CD),支持丰富的插件生态系统,适用于自动化构建、测试和部署。两者各有优势,Ansible适合配置管理与大规模部署,Jenkins则在CI/CD方面表现出色。结合使用可创建更强大的自动化工作流,提升团队生产力和软件质量。选择工具时应根据具体需求决定。
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
443 5
|
监控 前端开发 jenkins
Jenkins 在前端项目持续部署中的应用,包括其原理、流程以及具体的实现方法
本文深入探讨了Jenkins在前端项目持续部署中的应用,涵盖其基本原理、流程及具体实现方法。首先介绍了Jenkins的基本概念及其在自动化任务中的作用,随后详细解析了从前端代码提交到生产环境部署的全过程,包括构建、测试、部署等关键步骤。最后,强调了持续部署中的代码质量控制、环境一致性、监控预警及安全管理等注意事项,旨在帮助开发者高效、安全地实施持续部署。
553 5
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
808 3
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
监控 jenkins 持续交付
Docker和Jenkins有什么不同
【10月更文挑战第18天】Docker和Jenkins有什么不同
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
1549 1