win11下jenkins+docker+maven自动部署springboot项目

news2025/5/23 12:18:16

win11下jenkins+docker+maven自动部署springboot项目

      • 一、前置软件安装
      • 二、jenkins配置
      • 三、springboot项目准备
      • 四、jenkins打包部署项目到本地docker中
      • 五、jenkins打包部署项目到远程服务器docker中

一、前置软件安装

  1. docker安装
  • 需要开启wsl,以管理员身份运行docker desktop
  1. jenkins安装
  • Jenkins需要Java运行环境,建议安装JDK 11或更高版本
  • Jenkins的主目录默认会在C盘,可以修改到D盘

先停止jenkins服务,打开cmd执行

net stop jenkins

修改jenkins安装目录下的jenkins.xml文件
xml
修改保存完之后,手动将C盘中的文件(.jenkins、jenkins.pid等)复制到新目录中
最后重启jenkins服务

net stop jenkins

在这里插入图片描述

  1. git
  2. maven

二、jenkins配置

  1. 安装插件
  • Maven Integration plugin: Maven 集成管理插件。
  • Docker plugin: Docker集成插件。
  • GitLab Plugin: GitLab集成插件。
  • Publish Over SSH:远程文件发布插件。
  • SSH: 远程脚本执行插件。
    1
  1. 配置工具
  • maven
    maven
  • jdk
    在这里插入图片描述
  • git
    在这里插入图片描述
  • maven安装
    在这里插入图片描述
  • docker
    在这里插入图片描述
  1. 配置git sh.exe的位置,后面会需要执行sh命令,没配置会报错
    ssh
  2. 提前创建凭据,主要用于后面拉取代码和远程连接
    1
    其中从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中

  1. 构建任务
    在这里插入图片描述
  2. 添加描述,可以勾选创建string类型的变量
    在这里插入图片描述
    在这里插入图片描述
  3. 配置git仓库地址,验证方式前面步骤已创建好,这里使用ssh方式拉取代码
    在这里插入图片描述
  4. 增加构建步骤,maven打包
    在这里插入图片描述
    在这里插入图片描述
clean install -Dmaven.test.skip=true  dockerfile:build -f pom.xml

-Dmaven.test.skip=true 跳过测试
dockerfile:build 启动dockerfile插件构建容器
-f pom.xml 指定需要构建的文件(必须是pom)

  1. 增加构建步骤,执行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 自定义的参数

保存任务

  1. 执行任务
    任务执行前先启动docker,以管理员身份运行docker desktop
    在这里插入图片描述
    执行构建时可以查看日志
    在这里插入图片描述
    构建完成,在docker验证容器是否启动
    在这里插入图片描述
    测试接口,成功!
    在这里插入图片描述

五、jenkins打包部署项目到远程服务器docker中

本地docker将镜像推送到私有仓库中,虚拟机中的docker从私有仓库中拉取镜像并启动容器

  1. 配置本地docker

Docker 默认要求私有仓库使用 HTTPS,但本地测试通常用 HTTP。需要修改 Docker 配置:

右键 Docker 托盘图标 → Settings (设置)
进入 Docker Engine 配置 添加:
{
“insecure-registries”: [“192.168.xxx.xxx:5000”]
}
点击 Apply & Restart 重启 Docker。
在这里插入图片描述

  1. 下载最新Registry镜像
docker pull registry:latest
  1. 启动Registry镜像服务
docker run -d -p 5000:5000 --name registry -v /usr/local/docker/registry:/var/lib/registry registry:latest

映射5000端口; -v是将Registry内的镜像数据卷与本地文件关联, 便于管理和维护Registry内的数据。

  1. 查看仓库资源
    访问地址: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
  1. 远程服务器docker配置
  • 修改docker配置,添加 “insecure-registries”: [“192.168.xxx.xxx:5000”]
vim /etc/docker/daemon.json

在这里插入图片描述

  • 重启docker服务
systemctl restart docker
  1. jenkins中配置远程服务器(确保安装了Publish Over SSH和SSH插件)
    在这里插入图片描述
  2. 开始构建任务
  • 新建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_NAME

echo '================删除清理容器镜像================'
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

在这里插入图片描述
保存任务

  1. 执行任务
    执行任务前先启动docker,并且启动registry容器,确保registry容器正常运行
    在这里插入图片描述
    启动jenkins任务

在这里插入图片描述
任务执行时可以查看日志
在这里插入图片描述
10. 登录远程服务器,验证容器是否启动
在这里插入图片描述
测试接口,成功!
在这里插入图片描述

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

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

相关文章

《决策科学与艺术》No1: 决策树:概念、原理、发展历史、特点及应用

决策树&#xff1a;概念、原理、发展历史、特点及应用 摘要 决策树是一种广泛使用的机器学习和决策分析方法&#xff0c;以其可解释性、简洁性和多功能性著称。本文全面介绍了决策树的概念基础、基本原理、发展历程、显著特征及其在商业、医疗、金融和工程等多个领域的典型应用…

【苍穹外卖】Day01—Mac前端环境搭建

目录 一、安装Nginx &#xff08;一&#xff09;安装Homebrew &#xff08;二&#xff09;Homebrew安装Nginx 1. 执行安装命令&#xff1a; 2. 验证安装&#xff1a; &#xff08;三&#xff09;启动与停止Nginx 二、配置Nginx 1. 替换nginx.conf 2. 替换html文件夹 三…

软考中级软件设计师——设计模式篇

一、设计模式核心分类 设计模式分为 3 大类&#xff0c;共 23 种模式&#xff08;考试常考约 10-15 种&#xff09;&#xff1a; 分类核心模式考试重点创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现&#xff08;懒汉、饿汉&#xff09;、工厂模式的应用场…

Axure系统原型设计列表版方案

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

微软全新开源命令行文本编辑器:Edit — 致敬经典,拥抱现代

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

年会招标抽奖活动软件———仙盟创梦IDE

年会是企业一年的总结与欢庆时刻&#xff0c;而抽奖环节更是点燃全场气氛的关键。如何让抽奖环节既大气又充满仪式感&#xff1f;选对抽奖软件至关重要&#xff01;本文精心挑选了 3 款兼具实用性与氛围感的年会抽奖软件&#xff0c;从界面设计到功能特色&#xff0c;全方位为你…

智防火灾,慧控能耗:物联网赋能金融行业电气安全革新

摘要 随着金融行业对电气安全需求的不断提升&#xff0c;传统用电管理模式已难以满足现代金融机构对火灾防控、能耗管理和智能运维的要求。本文基于物联网、云计算及大数据分析技术&#xff0c;提出一套针对金融行业的安全用电解决方案。该方案通过智能化硬件部署与平台化管理…

在 JavaScript 中正确使用 Elasticsearch,第二部分

作者&#xff1a;来自 Elastic Jeffrey Rengifo 回顾生产环境中的最佳实践&#xff0c;并讲解如何在无服务器环境中运行 Elasticsearch Node.js 客户端。 想获得 Elastic 认证&#xff1f;查看下一期 Elasticsearch Engineer 培训的时间&#xff01; Elasticsearch 拥有大量新…

更新nvidia-container-toolkit 1.17.7-1后,运行--gpus all 卡死问题

用Arch每日一滚&#xff0c;结果今天用 sudo docker run -it --runtimenvidia --gpus all居然卡死了&#xff0c;排雷排了几小时&#xff0c;才从开源库发现问题 nvidia-container-toolkit 1.17.7-1 是有问题的&#xff0c;而且在ubuntu和arch上都存在问题。 只好Downgrade 1.…

通义灵码 2.5 版深度评测:智能编程的边界在哪里?

通义灵码 2.5 版深度评测&#xff1a;智能编程的边界在哪里&#xff1f; 评测目标 全面测试智能体模式&#xff1a;是否真正具备自主决策能力&#xff1f;MCP 工具集成体验&#xff1a;能否提升开发效率&#xff1f;AI 记忆自感知能力&#xff1a;是否能真正理解开发者习惯&a…

电商项目-商品微服务-规格参数管理,分类与品牌管理需求分析

本文章介绍&#xff1a;规格参数管理与分类与品牌管理的需求分析和表结构的设计。 一、规格参数管理 规格参数模板是用于管理规格参数的单元。规格是例如颜色、手机运行内存等信息&#xff0c;参数是例如系统&#xff1a;安卓&#xff08;Android&#xff09;后置摄像头像素&…

零基础设计模式——创建型模式 - 工厂方法模式

第二部分&#xff1a;创建型模式 - 工厂方法模式 (Factory Method Pattern) 上一节我们学习了单例模式&#xff0c;它关注如何保证一个类只有一个实例。现在&#xff0c;我们来看另一个重要的创建型模式——工厂方法模式。它关注的是如何创建对象&#xff0c;但将创建的决定权…

蓝桥杯5130 健身

问题描述 小蓝要去健身&#xff0c;他可以在接下来的 1∼n 天中选择一些日子去健身。 他有 m 个健身计划&#xff0c;对于第 i 个健身计划&#xff0c;需要连续的 天&#xff0c;如果成功完成&#xff0c;可以获得健身增益 si​ &#xff0c;如果中断&#xff0c;得不到任何…

电商虚拟户:重构资金管理逻辑,解锁高效归集与智能分账新范式

一、电商虚拟户的底层架构与核心价值 在数字经济浪潮下&#xff0c;电商交易的复杂性与日俱增&#xff0c;传统账户体系已难以满足平台企业对资金管理的精细化需求。电商虚拟户作为基于银行或持牌支付机构账户体系的创新解决方案&#xff0c;通过构建“主账户子账户”的虚拟账户…

腾讯2025年校招笔试真题手撕(二)

一、题目 最近以比特币为代表的数字货币市场非常动荡&#xff0c;聪明的小明打算用马尔科夫链来建模股市。如图所示&#xff0c;该模型有三种状态&#xff1a;“行情稳定”&#xff0c;“行情大跌”以及“行情大涨”。每一个状态都以一定的概率转化到下一个状态。比如&#xf…

安装完dockers后就无法联网了,执行sudo nmcli con up Company-WiFi,一直在加载中

Docker服务状态检查 执行 systemctl status docker 确认服务是否正常 若未运行&#xff0c;使用 sudo systemctl start docker && sudo systemctl enable docker 网络配置冲突 Docker会创建docker0虚拟网桥&#xff0c;可能与宿主机网络冲突 检查路由表 ip route sho…

【深度学习新浪潮】2025年谷歌I/O开发者大会keynote观察

1. 2025年谷歌I/O开发者大会keynote重点信息 本次Google I/O大会的核心策略是降低AI使用门槛与加速开发者创新,通过端侧模型(Gemini Nano)、云端工具(Vertex AI)和基础设施(TPU)的全链路优化,进一步巩固其在生成式AI领域的领先地位。同时,高价订阅服务和企业级安全功…

案例分享——福建洋柄水库大桥智慧桥梁安全监测

项目背景 洋柄水库桥位于社马路(社店至马坪段)上&#xff0c;桥梁全长285m&#xff0c;桥梁中心桩号K15082跨径组合为 14x20m&#xff0c;全桥宽:33.8m&#xff0c;分左右双幅:上部结构采用空心板梁:桥采用柱式墩。 通过对桥梁结构长时间的定期观测&#xff0c;掌握桥梁在混凝…

鸿蒙操作系统架构:构建全场景智慧生态的分布式操作系统

鸿蒙操作系统(HarmonyOS)是华为推出的面向全场景的分布式操作系统,旨在为智能手机、智能家居、智能穿戴、车机等多种设备提供统一的操作系统平台。鸿蒙架构的核心设计理念是“一次开发,多端部署”,通过分布式技术实现设备间的无缝协同。本文将深入探讨鸿蒙的分层架构、分布…

NBA足球赛事直播源码体育直播M35模板赛事源码

源码名称&#xff1a;NBA足球赛事直播源码体育直播M35模板赛事源码 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff01; 演示地址&#xff1a;https://www.52muban.com/shop/184…