Jenkins 中自动化部署 Spring Boot 项目

news2025/1/6 13:31:22

请添加图片描述

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的全栈工程师
欢迎分享 / 收藏 / 赞 / 在看!

准备工作

本文将介绍如何使用 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 会自动触发任务,实现自动化部署:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cesium小知识:常见的20多种property详解

要详细解释 Cesium 中所有的 Property 类,内容确实会非常丰富且详尽。 Property 基础 Property 是 Cesium 中用于表示随时间或条件变化的值的基础类。它允许你定义属性值如何根据时间、用户交互或其他逻辑动态改变。Property 的设计使得你可以创建复杂的动画和交互效果,而…

PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化

1、PCL点云库中点云特征综述 1.1、点云特征综述 点云特征描述在三维数据处理领域扮演着至关重要的角色&#xff0c;它直接决定了后续的识别、分类以及重建等关键任务的执行效果。在众多的特征描述方法中&#xff0c;我们可以看到基于几何形状的特征、基于统计信息的特征以及…

【《python爬虫入门教程11--重剑无峰168》】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找&#xff1f;-- 如果用edge也是类似的1.chrome…

C++之map和set的模拟实现

目录 引言 红黑树迭代器实现 红黑树元素的插入 map模拟实现 set模拟实现 之前我们已经学习了map和set的基本使用&#xff0c;但是因为map和set的底层都是用红黑树进行封装实现的&#xff0c;上期我们已经学习了红黑树的模拟实现&#xff0c;所以本期我们在红黑树模拟实现…

黑马JavaWeb开发跟学(十四).SpringBootWeb原理

黑马JavaWeb开发跟学 十四.SpringBootWeb原理 SpingBoot原理1. 配置优先级2. Bean管理2.1 获取Bean2.2 Bean作用域2.3 第三方Bean 3. SpringBoot原理3.1 起步依赖3.2 自动配置3.2.1 概述3.2.2 常见方案3.2.2.1 概述3.2.2.2 方案一3.2.2.3 方案二 3.2.3 原理分析3.2.3.1 源码跟踪…

十二、Vue 路由

文章目录 一、简介二、安装与基本配置安装 Vue Router创建路由实例在应用中使用路由实例三、路由组件与视图路由组件的定义与使用四、动态路由动态路由参数的定义与获取动态路由的应用场景五、嵌套路由嵌套路由的概念与配置嵌套路由的应用场景六、路由导航<router - link>…

【C++笔记】红黑树(RBTree)深度剖析和AVL树的对比分析

【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】红黑树(RBTree)深度剖析和AVL树的对比分析前言一.红黑树的定义1.1 红黑树的概念1.2红黑树的规则1.3 红黑树对比A…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组&#xff1a; 按照 team 列&#xff08;即团队&#xff09;。按照 name 列的 首字母&#xff08;df.name.str[0]&#xff09;。 df.name.s…

计算机毕设-基于springboot的食品厂管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始&#xff0c;支持本机和Docker容器两种部署方式。 如果您使用本机部署方式&#xff0c;建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式&#xff0c;可以使用x…

Java项目实战II基于小程序的驾校管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着汽车保有量的不断增长&#xff0c;驾驶培训市场日…

基于STM32F103的USART的原理及应用(一)(实现手机BLE和MCU进行通信)

一&#xff0c;查阅数据手册&#xff0c;找到对应的IO口和外设总线并配置好外设源文件 想了解USART的具体原理的小伙伴请进传送门&#xff1a;&#xff08;总结&#xff09;STM32中USART原理及应用&#xff08;PC、BLE、ESP8266通信实现&#xff09;-CSDN博客 二&#xff0c;打…

C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能

下载源码 <-------- 在C#的世界里&#xff0c;GDI如同一位多才多艺的艺术家&#xff0c;以其强大的绘图能力&#xff0c;让开发者能够轻松地在应用程序中挥洒创意&#xff0c;绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制&#xff0c;还能处理复杂的图像处理任…

Python应用指南:高德交通态势数据

在现代城市的脉络中&#xff0c;交通流量如同流动的血液&#xff0c;交通流量的动态变化对出行规划和城市管理提出了更高的要求。为了应对这一挑战&#xff0c;高德地图推出了交通态势查询API&#xff0c;旨在为开发者提供一个强大的工具&#xff0c;用于实时获取指定区域或道路…

数据结构与算法Python版 图的应用与广度优先搜索

文章目录 一、图的应用-词梯问题二、图的广度优先搜索 一、图的应用-词梯问题 词梯问题 Word Ladder 从一个单词演变到另一个单词&#xff0c;其中的过程可以经过多个中间单词。要求是相邻两个单词之间差异只能是1个字母如FOOL变SAGE&#xff1a;FOOL >> POOL >>…

服务器数据恢复—服务器硬盘亮黄灯的数据恢复案例

服务器硬盘指示灯闪烁黄灯是一种警示&#xff0c;意味着服务器硬盘出现故障即将下线。发现这种情况建议及时更换硬盘。 一旦服务器上有大量数据频繁读写&#xff0c;硬盘指示灯会快速闪烁。服务器上某个硬盘的指示灯只有黄灯亮着&#xff0c;而其他颜色的灯没有亮的话&#xff…

Java SpringBoot使用EasyExcel导入导出Excel文件

点击下载《Java SpringBoot使用EasyExcel导入导出Excel文件(源代码)》 在 Java Spring Boot 项目中&#xff0c;导入&#xff08;读取&#xff09;和导出&#xff08;写入&#xff09; Excel 文件是一项常见的需求。EasyExcel 是阿里巴巴开源的一个用于简化 Java 环境下 Excel…

Deduction(演绎法)和Reduction(还原法)-关于中西方思维的差异

Deduction(演绎法)和Reduction(还原法)-关于中西方思维的差异 最近看到中国新一代战机上天的消息,感慨万千;忽然想起来两年多前一次爬山的时候,一个友人跟我大概说过,Deduction和Reduction分别对应了中国古代和西方古代以来的思考自然和技术发明的思想.于是又在这方面琢磨了一番…

unity学习6:unity的3D项目的基本操作

目录 1 unity界面的基本认识 1.1 file 文件 1.2 edit 编辑/操作 1.3 Assets 1.4 gameobject 游戏对象 1.5 组件 1.6 windows 2 这些部分之间的关系 2.1 关联1&#xff1a; Assets & Project 2.2 关联2&#xff1a;gameobject & component 2.3 关联3&#xff…

【银河麒麟高级服务器操作系统实例】tcp半链接数溢出分析及处理全过程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 系统环境 物理机/虚拟机/云…