win11下jenkins+docker+maven自动部署springboot项目
win11下jenkins+docker+maven自动部署springboot项目
- 一、前置软件安装
- 二、jenkins配置
- 三、springboot项目准备
- 四、jenkins打包部署项目到本地docker中
- 五、jenkins打包部署项目到远程服务器docker中
一、前置软件安装
- docker安装
- 需要开启wsl,以管理员身份运行docker desktop
- jenkins安装
- Jenkins需要Java运行环境,建议安装JDK 11或更高版本
- Jenkins的主目录默认会在C盘,可以修改到D盘
先停止jenkins服务,打开cmd执行
net stop jenkins
修改jenkins安装目录下的jenkins.xml文件
修改保存完之后,手动将C盘中的文件(.jenkins、jenkins.pid等)复制到新目录中
最后重启jenkins服务
net stop jenkins
- git
- maven
二、jenkins配置
- 安装插件
- Maven Integration plugin: Maven 集成管理插件。
- Docker plugin: Docker集成插件。
- GitLab Plugin: GitLab集成插件。
- Publish Over SSH:远程文件发布插件。
- SSH: 远程脚本执行插件。
- 配置工具
- maven
- jdk
- git
- maven安装
- docker
- 配置git sh.exe的位置,后面会需要执行sh命令,没配置会报错
- 提前创建凭据,主要用于后面拉取代码和远程连接
其中从github中拉取代码时可以使用https和ssh两种方式,验证方式也分两种
- https方式需要配置token
因为 GitHub 禁用了密码认证(自 2021 年 8 月 13 日起),需要使用 Token进行认证
生成 GitHub Token
1、 访问 GitHub → Settings → Developer Settings → Personal Access Tokens (Tokens Classic)
2 、点击 Generate new token (Classic)
3 、填写 Note(如 Git CLI Access)
4 、勾选 repo(至少需要 repo 权限)
5 、点击 Generate token,并复制 Token(只会显示一次,请保存好!
- ssh方式
需要生成公钥添加到github中,配置的时候填私钥
步骤 1:生成 SSH Key
bash
ssh-keygen -t ed25519 -C “your_email@example.com”
(按 Enter 默认选项,生成的密钥在 ~/.ssh/ 目录)
步骤 2:添加 SSH Key 到 GitHub
查看公钥:
bash
cat ~/.ssh/id_ed25519.pub
复制公钥内容,进入 GitHub → Settings → SSH and GPG keys → New SSH Key,粘贴并保存。
配置私钥后如果还是验证失败,在 Jenkins 全局配置中禁用严格主机检查(不推荐生产环境)
进入 Manage Jenkins > Security 找到 Git Host Key Verification Configuration,选择 Accept first connection(仅临时测试用)。
三、springboot项目准备
项目结构
pom文件使用dockerfile插件
<properties><java.version>8</java.version><docker.image>docker_repo</docker.image></properties><build><finalName>demo</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><configuration><!-- 指定docker镜像仓库名称 --><repository>${docker.image}/${project.artifactId}</repository><buildArgs><!-- Dockerfile中使用 ARG AR_FILE 指令引用变量 --><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins></build>
多环境配置
Dockerfile放在根目录下
# 需要依赖的基础镜像
FROM openjdk:8-jdk# 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层
VOLUME /tmp# 拷贝运行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar# 设置JVM运行参数, 这里限定下内存大小,减少开销
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"#空参数,方便创建容器时传参
ENV PARAMS=""# 入口点, 执行JAVA运行命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]# 指定维护者的名字
MAINTAINER chen
将项目代码提交到github中
四、jenkins打包部署项目到本地docker中
- 构建任务
- 添加描述,可以勾选创建string类型的变量
- 配置git仓库地址,验证方式前面步骤已创建好,这里使用ssh方式拉取代码
- 增加构建步骤,maven打包
clean install -Dmaven.test.skip=true dockerfile:build -f pom.xml
-Dmaven.test.skip=true 跳过测试
dockerfile:build 启动dockerfile插件构建容器
-f pom.xml 指定需要构建的文件(必须是pom)
- 增加构建步骤,执行shell脚本
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]then#删除之前的容器docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi# 清理镜像
docker image prune -f # 启动docker服务
docker run -d -p 6688:6688 -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_image/$JOB_NAME
-p 端口映射
$JOB_NAME jenkins的内置变量,任务名
$docker_image 自定义的参数
保存任务
- 执行任务
任务执行前先启动docker,以管理员身份运行docker desktop
执行构建时可以查看日志
构建完成,在docker验证容器是否启动
测试接口,成功!
五、jenkins打包部署项目到远程服务器docker中
本地docker将镜像推送到私有仓库中,虚拟机中的docker从私有仓库中拉取镜像并启动容器
- 配置本地docker
Docker 默认要求私有仓库使用 HTTPS,但本地测试通常用 HTTP。需要修改 Docker 配置:
右键 Docker 托盘图标 → Settings (设置)
进入 Docker Engine 配置 添加:
{
“insecure-registries”: [“192.168.xxx.xxx:5000”]
}
点击 Apply & Restart 重启 Docker。
- 下载最新Registry镜像
docker pull registry:latest
- 启动Registry镜像服务
docker run -d -p 5000:5000 --name registry -v /usr/local/docker/registry:/var/lib/registry registry:latest
映射5000端口; -v是将Registry内的镜像数据卷与本地文件关联, 便于管理和维护Registry内的数据。
- 查看仓库资源
访问地址:http://localhost:5000/v2/_catalog 启动正常, 可以看到返回:
{"repositories":[]}
目前并没有上传镜像, 显示空数据。如果上传成功, 可以看到数据:
5. 远程服务器开启ssh
- 安装OpenSSH服务器
sudo apt update
sudo apt install openssh-server
- 检查SSH服务状态
sudo systemctl status ssh
- 配置防火墙
sudo ufw allow ssh
# 或者直接指定端口
sudo ufw allow 22/tcp
- 开启root密码认证
修改/etc/ssh/sshd_config中的配置
Port 22 # 确保端口正确(默认22)
PermitRootLogin yes # 启用root密码登录
StrictModes no # 关闭严格模式
PasswordAuthentication yes # 必须设为yes(允许密码登录)
PubkeyAuthentication yes # 公钥认证(可选)
修改完重启ssh服务
sudo systemctl restart ssh
- 远程服务器docker配置
- 修改docker配置,添加 “insecure-registries”: [“192.168.xxx.xxx:5000”]
vim /etc/docker/daemon.json
- 重启docker服务
systemctl restart docker
- jenkins中配置远程服务器(确保安装了Publish Over SSH和SSH插件)
- 开始构建任务
- 新建item
- 添加描述,配置参数
描述
参数docker_registry
参数docker_image
- 源码管理git
- 增加构建步骤 1.maven
clean install -Dmaven.test.skip=true dockerfile:build -f pom.xml
- 增加构建步骤 2.执行shell脚本
image_tag=$docker_registry/$docker_image/$JOB_NAME
echo '================docker镜像清理================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]then#删除之前的容器docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi# 清理镜像
docker image prune -f # 创建TAG
docker tag $docker_image/$JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
docker rmi $image_tag
echo '================docker tag 清理 ================'
- 增加构建步骤 3. 在远程服务器上执行脚本
echo '================拉取最新镜像================'
docker pull $docker_registry/$docker_image/$JOB_NAMEecho '================删除清理容器镜像================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]then#删除之前的容器docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi# 清理镜像
docker image prune -f echo '===============启动容器================'
docker run -d -p 6688:6688 -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/$docker_image/$JOB_NAME
保存任务
- 执行任务
执行任务前先启动docker,并且启动registry容器,确保registry容器正常运行
启动jenkins任务
任务执行时可以查看日志
10. 登录远程服务器,验证容器是否启动
测试接口,成功!
相关文章:

win11下jenkins+docker+maven自动部署springboot项目
win11下jenkinsdockermaven自动部署springboot项目 一、前置软件安装二、jenkins配置三、springboot项目准备四、jenkins打包部署项目到本地docker中五、jenkins打包部署项目到远程服务器docker中 一、前置软件安装 docker安装 需要开启wsl,以管理员身份运行docke…...
密码学标准(Cryptography Standards)介绍
密码学标准(Cryptography Standards)是为确保信息安全传输、存储和处理而制定的一系列技术规范和协议,广泛应用于通信、金融、互联网等领域。以下从分类、主流标准、应用场景和发展趋势四个方面进行详细介绍: 一、密码学标准的分类 密码学标准可根据技术原理和应用场景分…...
2 卡尔曼滤波
卡尔曼滤波是啥? 卡尔曼滤波就像是一个“智能猜谜大师”,专门用来在不确定的情况下,算出最接近真实值的答案。 核心思想: 预测(猜):根据之前的经验,猜现在大概是什么状态ÿ…...

《决策科学与艺术》No1: 决策树:概念、原理、发展历史、特点及应用
决策树:概念、原理、发展历史、特点及应用 摘要 决策树是一种广泛使用的机器学习和决策分析方法,以其可解释性、简洁性和多功能性著称。本文全面介绍了决策树的概念基础、基本原理、发展历程、显著特征及其在商业、医疗、金融和工程等多个领域的典型应用…...
手机合集(不定期更新)
一、华为手机: 1.华为手机自助维修的方法: https://blog.csdn.net/humors221/article/details/145946128 2.华为手机实用功能介绍: https://blog.csdn.net/humors221/article/details/132514011 3.华为手机清理大数据的方法:…...
掌握正则表达式:从基础语法到工程实践
引言:正则表达式的力量与边界 在信息爆炸的数字时代,正则表达式(Regular Expression) 作为文本处理的“瑞士军刀”,已成为开发者、数据分析师、运维工程师等群体的核心技能。它能用简洁的符号逻辑描述复杂…...
Prometheus 基础入门文档
目录 概述 核心组件详解 Prometheus Server Exporters Alertmanager 存储解决方案 安装与配置 安装方法 基本配置 示例配置文件 数据模型与查询语言 数据模型 PromQL 查询语言 示例查询 告警系统 告警规则 示例告警规则 Alertmanager 配置 示例 Alertmanager…...
【数据分析】什么是特征蒸馏?
引言 —— “ 在数据洪流中提炼真金——解密特征蒸馏的艺术。” 在数据爆炸的时代,我们每天产生的信息量已远超人类处理能力的极限。当企业拥有百万维的用户行为数据,医疗研究者面对TB级的基因测序记录,工程师试图从千万张图像中识别关键模式…...

【苍穹外卖】Day01—Mac前端环境搭建
目录 一、安装Nginx (一)安装Homebrew (二)Homebrew安装Nginx 1. 执行安装命令: 2. 验证安装: (三)启动与停止Nginx 二、配置Nginx 1. 替换nginx.conf 2. 替换html文件夹 三…...
Apollo10.0学习——planning模块(9)之参数详解一
planning.conf --flagfilemodules/common/data/global_flagfile.txt # 加载全局通用配置,包含基础运行参数 --traffic_rule_config_filenamemodules/planning/planning_component/conf/traffic_rule_config.pb.txt # 交通规则配置文件,定义信号灯、停车…...
Python-多进程编程 (multiprocessing 模块)
目录 一、创建进程1. Process 的语法结构2. 进程不共享全局变量 二、进程间通信1. 队列通信2. 管道通信 三、进程池1. 常用函数2. 进程池中的 Queue 四、应用:复制文件夹(多进程版)五、守护进程和进程同步六、注意事项 通过使用 multiprocess…...
GraphQL在.NET 8中的全面实践指南
一、GraphQL与.NET 8概述 GraphQL是一种由Facebook开发的API查询语言,它提供了一种更高效、更灵活的替代REST的方案。与REST不同,GraphQL允许客户端精确指定需要的数据结构和字段,避免了"过度获取"或"不足获取"的问题。…...
在mobaxterm下面执行shell脚本报错
关键步骤:在 MobaXterm 的 SSH 会话中强制指定 Bash 解释器 若你曾通过 高级 SSH 设置中的「执行命令」 填写 /bin/bash 解决脚本问题,以下是具体操作和原理说明: 1. 设置位置 打开 MobaXterm,选择需要配置的 SSH 会话࿰…...
系统集成项目管理工程师学习笔记之启动过程组
第十章 启动过程组 制定项目章程 定义 制定项目章程是编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程。 正式批准的项目文件 作用 1、明确项目与组织战略目标之间的直接联系 2、确立项目的正式地位 3、展示组织对项目的承诺 本过程仅开展一…...
OceanBase数据库全面指南(数据操作篇DML)
文章目录 一、OceanBase插入数据全指南1.1 INSERT语句基础用法1.2 高级INSERT用法1.2.1 插入查询结果1.2.2 多表插入1.2.3 条件插入1.3 INSERT性能优化技巧1.3.1 批量插入优化1.3.2 使用APPEND提示1.3.3 并行插入二、OceanBase批量插入优化2.1 多行插入语法详解2.2 批量绑定技术…...
深入解析AI中的Prompt工程:从理论到实践
目录 引言:Prompt在AI中的核心地位 第一部分:Prompt基础理论 1.1 什么是Prompt 1.2 ICIO框架:Prompt设计的结构化方法 1.3 为什么需要Prompt 1.4 Prompt的终极价值 第二部分:Prompt工程实践 2.1 Prompt工程概述 2.2 Prompt工程的具体内容 2.3 Prompt Engineer的工…...

软考中级软件设计师——设计模式篇
一、设计模式核心分类 设计模式分为 3 大类,共 23 种模式(考试常考约 10-15 种): 分类核心模式考试重点创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现(懒汉、饿汉)、工厂模式的应用场…...
matlab二维随机海面模拟
二维随机海面模拟是一种重要的技术,广泛应用于海洋工程、船舶设计、雷达系统和光学通信等领域。利用蒙特卡罗方法结合二维海浪功率谱模型,可以生成符合实际海面特性的随机表面。 步骤 1: 定义海浪功率谱模型 海浪功率谱模型描述了海浪能量在不同频率和…...

Axure系统原型设计列表版方案
列表页面是众多系统的核心组成部分,承担着数据呈现与基础交互的重要任务。一个优秀的列表版设计,能够极大提升用户获取信息的效率,优化操作体验。下面,我们将结合一系列精心设计的列表版方案图片,深入探讨如何打造出实…...

微软全新开源命令行文本编辑器:Edit — 致敬经典,拥抱现代
名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言:命令行的新利器二、Edit:致敬经典,拥抱现代1. 命令行的“新升级”2. 为什么要有 Edit?三、核心功能与特性一览1. 完全开源、MIT 许可证…...

年会招标抽奖活动软件———仙盟创梦IDE
年会是企业一年的总结与欢庆时刻,而抽奖环节更是点燃全场气氛的关键。如何让抽奖环节既大气又充满仪式感?选对抽奖软件至关重要!本文精心挑选了 3 款兼具实用性与氛围感的年会抽奖软件,从界面设计到功能特色,全方位为你…...

智防火灾,慧控能耗:物联网赋能金融行业电气安全革新
摘要 随着金融行业对电气安全需求的不断提升,传统用电管理模式已难以满足现代金融机构对火灾防控、能耗管理和智能运维的要求。本文基于物联网、云计算及大数据分析技术,提出一套针对金融行业的安全用电解决方案。该方案通过智能化硬件部署与平台化管理…...
Any类(C++17类型擦除,也称上帝类)
Any类(C17类型擦除,也称上帝类) 在C中,std::any 是C17标准引入的一个灵活的类型安全容器,用于存储任意类型的单个值。 1. std::any 的核心特性 类型安全:存储的值必须通过明确的类型转换(any_…...
jquery.table2excel方法导出
jquery提供了一个table2excel方法可以用来导出页面到xls等 $("#grid_595607").table2excel({exclude: ".noExport", // 排除类名为 noExport 的元素filename: "导出数据.xls",exclude_img: true, // 不导出图片exclude_links: true, // 不导…...
Spring Boot 多租户架构实现:基于上下文自动传递的独立资源隔离方案
一、核心设计思想 通过线程上下文自动传递租户ID,结合动态数据源路由和中间件连接工厂,实现MySQL、Redis、RocketMQ的完全自动化资源隔离。关键设计如下: #mermaid-svg-ZjXCGSWoCuNFMIch {font-family:"trebuchet ms",verdana,aria…...

在 JavaScript 中正确使用 Elasticsearch,第二部分
作者:来自 Elastic Jeffrey Rengifo 回顾生产环境中的最佳实践,并讲解如何在无服务器环境中运行 Elasticsearch Node.js 客户端。 想获得 Elastic 认证?查看下一期 Elasticsearch Engineer 培训的时间! Elasticsearch 拥有大量新…...

更新nvidia-container-toolkit 1.17.7-1后,运行--gpus all 卡死问题
用Arch每日一滚,结果今天用 sudo docker run -it --runtimenvidia --gpus all居然卡死了,排雷排了几小时,才从开源库发现问题 nvidia-container-toolkit 1.17.7-1 是有问题的,而且在ubuntu和arch上都存在问题。 只好Downgrade 1.…...
【Nginx学习笔记】:Fastapi服务部署单机Nginx配置说明
服务部署单机Nginx配置说明 服务.conf配置文件: upstream asr_backend {server 127.0.0.1:8010; }server {listen 80;server_name your_domain.com;location / {proxy_pass http://localhost:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remot…...
相机标定与图像处理涉及的核心坐标系
坐标系相互关系 #mermaid-svg-QxaMjIcgWVap0awV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QxaMjIcgWVap0awV .error-icon{fill:#552222;}#mermaid-svg-QxaMjIcgWVap0awV .error-text{fill:#552222;stroke:#552…...
在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件
ASP.NET 中 HttpHandler 的用法详解 在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件。根据你的配置文件,我将详细解释 <handlers> 节点的各种用法和配置选项。 1. HttpHandler 概述 HttpHandler 是…...