当前位置: 首页 > article >正文

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

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_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

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

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

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

http://www.lryc.cn/news/2383883.html

相关文章:

  • 密码学标准(Cryptography Standards)介绍
  • 2 卡尔曼滤波
  • 《决策科学与艺术》No1: 决策树:概念、原理、发展历史、特点及应用
  • 手机合集(不定期更新)
  • 掌握正则表达式:从基础语法到工程实践
  • Prometheus 基础入门文档
  • 【数据分析】什么是特征蒸馏?
  • 【苍穹外卖】Day01—Mac前端环境搭建
  • Apollo10.0学习——planning模块(9)之参数详解一
  • Python-多进程编程 (multiprocessing 模块)
  • GraphQL在.NET 8中的全面实践指南
  • 在mobaxterm下面执行shell脚本报错
  • 系统集成项目管理工程师学习笔记之启动过程组
  • OceanBase数据库全面指南(数据操作篇DML)
  • 深入解析AI中的Prompt工程:从理论到实践
  • 软考中级软件设计师——设计模式篇
  • matlab二维随机海面模拟
  • Axure系统原型设计列表版方案
  • 微软全新开源命令行文本编辑器:Edit — 致敬经典,拥抱现代
  • 年会招标抽奖活动软件———仙盟创梦IDE
  • 智防火灾,慧控能耗:物联网赋能金融行业电气安全革新
  • Any类(C++17类型擦除,也称上帝类)
  • jquery.table2excel方法导出
  • Spring Boot 多租户架构实现:基于上下文自动传递的独立资源隔离方案
  • 在 JavaScript 中正确使用 Elasticsearch,第二部分
  • 更新nvidia-container-toolkit 1.17.7-1后,运行--gpus all 卡死问题
  • 【Nginx学习笔记】:Fastapi服务部署单机Nginx配置说明
  • 相机标定与图像处理涉及的核心坐标系
  • ​在 ASP.NET 中,HTTP 处理程序(HttpHandler)是处理 HTTP 请求的核心组件​
  • 通义灵码 2.5 版深度评测:智能编程的边界在哪里?