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

发布于:2025-05-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、前置软件安装

  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. 登录远程服务器,验证容器是否启动
在这里插入图片描述
测试接口,成功!
在这里插入图片描述