Jenkins中自动化部署Spring Boot项目的全过程

 更新时间:2025年01月06日 10:03:43   作者:编程洪同学  
这篇文章主要介绍了如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的构建、镜像构建和容器运行,确保项目在更新时自动部署,需要的朋友可以参考下

准备工作

本文将介绍如何使用 Jenkins 从仓库中拉取项目,经过打包、构建镜像、运行容器等步骤,最终将 Spring Boot 项目部署到服务器上供用户访问。并且当项目有更新时,自动触发 Jenkins 任务,实现自动化部署。

在开始之前,需要先创建一个 Spring Boot 项目,提供一些测试的接口。在确保项目正常运行的情况下,将项目推送到 Git 远程仓库。

Spring Boot 项目文件目录结构:

Dockerfile 文件内容:

FROM bellsoft/liberica-openjdk-debian:17.0.11-cds

LABEL maintainer="hayden"

RUN mkdir -p /demo/server/logs \
    /demo/server/temp

WORKDIR /demo/server

ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms512m -Xmx512m"

EXPOSE ${SERVER_PORT}

ADD ./target/demo.jar ./app.jar

ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
           -XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
           -jar app.jar

启动 Jenkins

使用 docker-compose 构建 Jenkins 容器。

文件树结构:

.
├── docker-compose.yml
└── jenkins
    ├── jenkins_config
    └── jenkins_home

docker-compose.yml 文件内容:

version : '3.0.01'
services:
  jenkins:
  container_name: jenkins
  image: jenkins/jenkins:lts-jdk17
  restart: unless-stopped
  ports:
    - "10000:8080"
  volumes:
    # 数据卷挂载路径设置,将本机目录映射到容器目录 (下面映射可在容器中执行宿主机docker命令)
    - "/usr/bin/docker:/usr/bin/docker"
    - "/var/run/docker.sock:/var/run/docker.sock"
    - "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"
    #      - "/usr/local/bin/docker-compose:/usr/local/bin/docker-compose"  # 无效
    - "./jenkins/jenkins_home:/var/jenkins_home"
    # ThinBackup插件备份jenkins配置存储目录
    - "./jenkins/jenkins_config:/var/jenkins_config"
    # 解决jenkins安装插件报错: An error occurred during installation: No such plugin: cloudbees-folder
    # 下载地址  http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/
    #      - "./jenkins/jenkins_home/war/META-INF/detached-plugins/cloudbees-folder.hpi:/var/jenkins_home/war/META-INF/detached-plugins/cloudbees-folder.hpi"
  environment:
    TZ: Asia/Shanghai
    LANG: en_US.UTF-8
    JAVA_OPTS: -Xmx512M -Xms512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MaxNewSize=128m -Djava.util.logging.config.file=/var/jenkins_home/log.properties -Duser.timezone=Asia/Shanghai
  user: root # 使用root权限运行容器(docker中通过`-u root`命令)

启动 Jenkins 容器:

docker-compose up -d jenkins

开放 10000 端口,允许外部访问:

firewall-cmd --zone=public --add-port=10000/tcp --permanent
firewall-cmd --reload

配置 Jenkins

在浏览器中输入 http://[ip]:10000 访问 Jenkins。经过一系列设置,完成 Jenkins 的初始化。

在系统管理->全局工具配置中配置 JDK,以 JDK 17 为例:

安装 URL:https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

在系统管理->全局工具配置中配置 Maven,以 Maven 3.9 为例:

下载完 Maven 后还需要修改镜像地址,避免出现下载速度过慢的问题:

# 进入 Maven 配置文件目录
cd jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/
# 编辑配置文件
vim maven-3.9.9/conf/settings.xml

# 替换原镜像地址
<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

::: tip 注意

使用 Jenkins 的安装方式中,会将软件安装到对应目录的下一层目录,例如 JDK 安装

到 jenkins/jenkins_home/tools/hudson.model.JDK/jdk-17/jdk-17.0.12,导致出现找不到 JDK 的问题。

解决方法:来到对应的目录中,将 JDK 的目录移动到上一层目录即可。

cd jenkins/jenkins_home/tools/hudson.model.JDK/jdk-17
mv jdk-17.0.12/* .
rm -rf jdk-17.0.12

:::

创建及配置任务

在 Jenkins 主页点击新建任务,选择构建一个 maven 项目,点击确定:

源码管理

在源码管理中选择 Git,填写仓库地址、凭证、分支等信息:

构建触发器

在构建触发器中选择 Generic Webhook Trigger,填写 Token,点击应用:

这时来到 Git 远程仓库的 Webhook 配置页面,填写 Jenkins URL 和 Token,点击添加:

URL 格式:http://[ip]:10000/generic-webhook-trigger/invoke?token=Token

构建

由于 pom.xml 在项目根目录下,所以这边默认使用 pom.xml 进行构建:

构建后操作

勾选 Run only if build succeeds,填写 Shell 脚本:

# 删除旧容器
docker rm -f my-spring-boot
# 删除旧镜像
docker rmi -f my-spring-boot:latest
# 构建新镜像
docker build -t my-spring-boot .
# 运行容器
docker run --name my-spring-boot -p 8080:8080 -d my-spring-boot:latest

点击保存,任务配置完成。

构建任务

在 Jenkins 主页点击任务名称,点击立即构建,可以看到正在构建的历史过程。点击构建历史中的任务,可以查看详细的构建日志:

多尝试几次,确保构建成功。

测试

在浏览器中输入指定 URL,可以看到项目已经部署成功。并且当 Git 仓库中的项目有更新时,Jenkins 会自动触发任务,实现自动化部署:

总结 

到此这篇关于Jenkins中自动化部署Spring Boot项目的文章就介绍到这了,更多相关Jenkins自动化部署SpringBoot项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MybatisPlus使用聚合函数的示例代码

    MybatisPlus使用聚合函数的示例代码

    本文主要介绍了MybatisPlus使用聚合函数的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MyBatis-Plus3.x版本使用入门和踩过的坑

    MyBatis-Plus3.x版本使用入门和踩过的坑

    Mybatis-Plus是Mybatis的增强版,他只是在Mybatis的基础上增加了功能,且并未对原有功能进行任何的改动,本文给大家说一下MyBatis-Plus3.x版本使用入门和踩过的坑,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • SpringBoot ResponseBody返回值处理的实现

    SpringBoot ResponseBody返回值处理的实现

    这篇文章主要介绍了SpringBoot ResponseBody返回值处理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Springboot接收 Form 表单数据的示例详解

    Springboot接收 Form 表单数据的示例详解

    这篇文章主要介绍了Springboot接收 Form 表单数据的实例代码,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 23种设计模式(10)java组合模式

    23种设计模式(10)java组合模式

    这篇文章主要为大家详细介绍了23种设计模式之java组合模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • JAVASE精密逻辑控制过程详解(分支和循环语句)

    JAVASE精密逻辑控制过程详解(分支和循环语句)

    在一个程序执行的过程中各条语句的执行顺序对程序的结果是有直接影响的,这篇文章主要给大家介绍了关于JAVASE精密逻辑控制(分支和循环语句)的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Java hashCode() 方法详细解读

    Java hashCode() 方法详细解读

    Java.lang.Object 有一个hashCode()和一个equals()方法,这两个方法在软件设计中扮演着举足轻重的角色,本文对hashCode()方法深入理解,希望能帮助大家
    2016-07-07
  • Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性

    Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性

    今天小编就为大家分享一篇关于Mybatis工具类JdbcTypeInterceptor运行时自动添加jdbcType属性,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Spring如何解决接口多实现类的依赖注入冲突

    Spring如何解决接口多实现类的依赖注入冲突

    在 Spring 中,当一个接口有多个实现类时,依赖注入(DI)的歧义性问题是一个常见挑战,本文为大家介绍了如何根据场景选择最优方案,希望对大家有所帮助
    2025-08-08
  • java读取csv文件内容示例代码

    java读取csv文件内容示例代码

    这篇文章主要介绍了java读取csv文件内容的示例,大家参考使用
    2013-12-12

最新评论