2025-09-04
工具运维
0

目录

Jenkins 简介
Jenkins 安装
Jenkins 初始化
Jenkins 配置
插件安装
SSH 配置
Maven 配置
一键部署 SpringBoot 项目
编写 Dcokerfile
新建任务
配置选项参数
配置GIT仓库
添加Maven构建
选择服务器与部署目录
开始部署

在项目上线时,你是否还在手动打包上传服务器,执行命令进行部署项目呢?这种方式一旦操作失误,就会降低线上环境的可靠性。今天给大家分享一下如何基于 Jenkins + Docker 从 GIT 上自动获取代码进行自动化构建部署 SpringBoot 项目。

Jenkins 简介

Jenkins是一个开源的自动化服务器,由Java编写,主要用于持续集成(CI)和持续交付/部署(CD)的自动化工作流。它通过插件生态系统扩展功能,支持与各种工具集成,如版本控制系统(Git、SVN)、构建工具(Maven、Gradle)、测试框架(JUnit、TestNG)和部署工具(Docker、Kubernetes)等。Jenkins旨在通过自动化构建、测试和部署流程,提高开发效率,减少人为错误,缩短交付周期。

Jenkins 安装

这里采用 Docker 的形式来安装,拉取镜像的命令如下:

sh
docker pull jenkins/jenkins:lts

image.png

镜像拉取完成后,创建容器运行,其默认端口是8080,容易与其他端口冲突,所以映射为 8880

sh
docker run -p 8880:8080 -p 5000:5000 --name jenkins \ -u root \ -v /opt/docker/jenkins:/var/jenkins_home \ -d jenkins/jenkins:lts

image.png

到此 jenkins 容器已启动完成

image.png

Jenkins 初始化

接下来我们将访问 Jenkins 界面,访问地址是 http://IP:8880/ ,初次登录需要输入管理员密码才可以使用

image.png

通过 docker logs jenkins 查看启动日志,密码会在控制台输出

image.png

当密码验证成功后,跳转到插件安装的页面,这里选择 安装推荐的插件

image.png

创建第一个管理员账户

image.png

image.png

image.png

Jenkins 配置

插件安装

点击右上角的系统管理,选择插件管理,开始进行插件的安装

image.png

安装 Publish Over SSH 插件,用于访问远程主机并执行命令。

image.png

SSH 配置

找到 系统管理 -> 系统配置

image.png

找到 SSH Servers 部分,填写要部署连接的服务器信息,需要注意的是必须装上 Publish Over SSH 插件才会有此功能项

image.png

点击高级,勾选上 Use password authentication, or use a different key 后,配置服务器的密码,配置完成后,点击下方 Test Configuration 测试连接是否成功

image.png

Maven 配置

找到 系统管理 -> 全局工具配置

image.png

首先配置 Maven,滑动到最下方,找到 Maven 安装,新增 Maven,填写个名字,点击保存

image.png

到这 Jenkins 就算配置完成了,接下来我们看下如何自动化部署 SpringBoot 项目。

一键部署 SpringBoot 项目

编写 Dcokerfile

在项目的根目录下,创建 docker 文件夹,编写 Dockerfile,内容如下,根据实际服务配置编写即可

sh
FROM openjdk:17-jdk RUN rm -rf /etc/localtime &&\ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ echo "Asia/Shanghai" > /etc/timezone COPY *.jar /data/ EXPOSE 9527 WORKDIR /data ENV JAVA_OPTS="-Xms128m -Xmx128m" ENV JAR_PATH="/data" ENV EXAM_ENV="prod" ENV LOGGING_PATH="/data/logs" ENTRYPOINT java ${JAVA_OPTS} \ -Dlogging.path=${LOGGING_PATH} \ -DSpring.profiles.active=${EXAM_ENV} \ -Dfile.encoding=UTF-8 \ -XX:NativeMemoryTracking=detail \ -jar ${JAR_PATH}/*.jar

新建任务

接下来我们通过 Jenkins 来创建任务实现 SpringBoot 项目的自动化部署,回到首页,点击新建任务

image.png

填写任务的名称,一般就是服务名称,选择 构建一个自由风格的软件项目,点击确定

image.png

配置选项参数

通过选项参数,可以让脚本动态获取到选项参数的值,让脚本变得更加通用,此处配置2个选项参数

  • var_project_name 项目名称
  • var_app_docker_path 软件工作目录

image.png

配置GIT仓库

紧接着在源码管理中,配置 Git 仓库地址,注意仓库地址必须是公共的

image.png

添加Maven构建

点击 Build Steps -> 增加构建步骤 -> 调用顶层 Maven 目标

image.png

选择之前配置的 Maven 3.9.11,添加目标也就是构建命令 clean install,点击高级,配置上 POM 文件目录 ${workspace}/pom.xml

再次添加构建步骤,目标 clean package,POM 目录为 ${WORKSPACE}/pom.xml,点击 Save 保存

image.png

注意

此处我得目录结构为

  • echo-im
  • echo-im-web
  • echo-im-common
  • echo-im-framework
  • echop-im-websocket

echo-im 即为根目录,是pom类型,当执行 clean install 时,其子模块会自动构建,需要根据实际目录地址选择 pom.xml 文件

选择服务器与部署目录

此处选择之前插件中配置的服务器别名,点击高级,勾选 Verbose output in console,构建开始后会在控制台输出详细的日志

接下来开始添加需要上传的文件

  • Source files 要上传的源文件
  • Remove prefix 删除源文件中的目录前缀,相当于只保留源文件目录中,如果不配置,则会跟源文件目录一起上传
  • Remote directory 上传源文件存放在服务器中的目录

此处选择根目录下 docker/Dockerfile 文件进行上传,在 build 时会用到

注意

此处的项目路径是内置 Mavan 编译路径,实际为 /var/jenkins_home/workspace/echo-im,可通过相对路径获取 echo-im 项目下的编译内容

image.png

配置要上传的jar包,同时也要去除下路径前缀,只保留jar包上传即可

image.png

动态的执行脚本如下,根据不同的项目路径会自动进行构建运行,还有一种方式可以将脚本放到 docker 目录下,例如是 run.sh ,与 Dockerfile 一起上传,当上传jar包后执行 sh run.sh

sh
#!/bin/bash echo "==================================================================" echo " 开始部署流程" echo "==================================================================" echo "当前时间: $(date)" echo "部署名称: ${var_project_name}" #获得变量 var_images_id=`docker images|grep -i ${var_project_name}|awk '{print $3}'` var_ps_id=`docker ps -a|grep -i ${var_project_name}|awk '{print $1}'` echo "${var_project_name} docker images ID:${var_images_id}" echo "${var_project_name} docker ps ID:${var_ps_id}" #结束镜像任务 if [ -n "$var_ps_id" ]; then docker rm -f ${var_ps_id} echo "结束镜像:${var_project_name},ID:${var_images_id}" fi #删除历史镜像 if [ -n "$var_images_id" ]; then docker rmi -f ${var_images_id} echo "删除镜像:${var_project_name} ID:${var_images_id}" fi #切换工作目录 cd /${var_app_docker_path}/${var_project_name} echo "当前目录:$(cd "$(dirname "$0")";pwd)" # 添加权限 chmod 721 Dockerfile echo "Dockerfile 添加权限" #开始构件镜像 docker build -t ${var_project_name} . echo "构建镜像:${var_project_name}" #执行镜像 docker run -it -d -p 9527:9527 -p 8101:8101 --name ${var_project_name} --link redis:7.2.4 -e TZ="Asia/Shanghai" -v /opt/docker/${var_project_name}/logs:/data/logs -v /opt/docker/nginx/html:/data/upload ${var_project_name} echo "${var_project_name} is running!" echo "==================================================================" echo " 部署流程结束" echo "=================================================================="

到此,任务构建的准备工作就完成了,服务中的整体效果如下

image.png

开始部署

开始构建,确认填写的选项参数,点击 build

image.png

查看控制台输出,如果运行的过程中存在问题根据控制台的输出信息进行调试即可

image.png

本文作者:柳始恭

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!