使用Jenkins进行自动化部署和持续集成-Java 项目实战(超详细)

发布时间:2026/7/19 16:14:28
使用Jenkins进行自动化部署和持续集成-Java 项目实战(超详细) 前言在现代软件开发流程中持续集成 CI、持续交付 CD已经成为企业级项目开发、运维的核心标准。Jenkins 作为开源、可扩展的自动化构建平台能够打通代码拉取、编译打包、镜像制作、项目部署全流程结合 GitLab、Maven、Docker、K8s 等技术可实现 Java 项目一键自动化上线极大提升开发与运维效率。本文基于实战项目jpress完整讲解 Jenkins 从环境搭建、基础配置到传统部署、Blue Ocean 可视化部署、Docker 容器化部署、Docker-Compose 编排、Pipeline 流水线部署的全流程涵盖 CI/CD 核心架构、插件配置、认证集成、脚本编写等实战要点。须知学习本文前需提前部署完成GitLab 代码仓库环境、Docker 私有镜像仓库环境Jenkins 部署过程会依赖这两个环境项目源码下载一、Jenkins 安装与基础环境准备1.1 Jenkins 核心介绍Jenkins 是一款开源、跨平台、可扩展的持续集成 持续交付CI/CDWeb 平台支持软件代码的编译、打包、测试、部署全流程自动化适配几乎所有开发语言与项目类型。官网https://jenkins.io/官方文档https://jenkins.io/doc/1.2 安装硬件 软件要求硬件最低 256MB 内存推荐 512MB 以上硬盘≥1GBJDK 环境Jenkins 2.357 版本强制要求Java11 及以上同时支持 Java17需提前安装对应版本 JDK/JRE配套工具Git代码版本管理、MavenJava 项目编译打包、Docker容器化部署。1.3 Linux 环境安装 JenkinsWar 包方式推荐使用war包部署 Jenkins自带 Jetty 内置服务器适配性最强。下载 Jenkins 最新 war 包本文课程提供专属 war 包可直接使用配置环境变量编辑/etc/profile添加 Jenkins 运行目录与 Java 环境export JENKINS_HOME/data/jenkins/data export JAVA_HOME/data/java17 PATH$JAVA_HOME/bin:$PATH source /etc/profile启动 Jenkins将 war 包上传至/data/jenkins目录后台启动服务初始化访问nohup java -jar jenkins.war 查看初始密码cat nohup.out复制 Jenkins 生成的随机口令************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 829482167dd146b6a4d554d71e9d141d This may also be found at: /data/jenkins/data/secrets/initialAdminPassword ************************************************************* ************************************************************* *************************************************************浏览器访问http://服务器IP:8080粘贴口令进入安装界面选择推荐插件安装自动部署常用插件创建admin管理员账号完成初始化。1.4 安装必备依赖工具1.4.1 安装 Gityum install git -y1.4.2 安装 Maven官网下载https://maven.apache.org/download.cgi本文使用apache-maven-3.8.8解压配置cd /usr/local/ tar zxvf apache-maven-3.8.8-bin.tar.gz mv apache-maven-3.8.8 maven # 配置环境变量编辑/etc/profile export M2_HOME/usr/local/maven export PATH$PATH:$M2_HOME/bin source /etc/profile1.4.3 安装 Docker 环境# 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 配置阿里云Docker镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast # 安装启动Docker yum install docker-ce -y systemctl restart docker systemctl enable docker # 验证安装 docker version二、Jenkins 基础配置插件 认证2.1 安装核心必备插件Jenkins 安装完成后需手动安装以下插件用于实现可视化、远程部署、流水线、容器化等功能Blue OceanJenkins 新一代可视化界面优化流水线操作体验Publish Over SSH / SSH Agent Plugin / SSH plugin远程服务器 SSH 连接、文件传输、脚本执行Pipeline流水线核心插件实现 CI/CD 流程编排Kubernetes plugin对接 K8s 容器编排平台Docker、Docker PipelineDocker 镜像构建、推送、容器管理。2.2 配置认证凭据Jenkins 需配置 GitLab、服务器登录凭据用于拉取代码、远程部署支持SSH 密钥认证、账号密码认证两种方式进入 Jenkins【凭据】-【系统】-【全局凭据】添加 3 类核心凭据GitLab SSH 密钥凭据用于 Jenkins 免密拉取 GitLab 代码服务器账号密码凭据用于 SSH 连接远程应用服务器Jenkins 内置 SSH 密钥用于 Blue Ocean 等插件鉴权。三、GitLab 与 Jenkins 集成自动化部署核心架构3.1 整体架构总览Jenkins 打通GitLab 代码仓库→Jenkins 构建服务→应用服务器 / Docker/K8s全链路实现代码提交自动触发构建、打包、部署核心架构分为 5 类通过gitlabjenkins自动化部署常规网站流程通过gitlabjenkins部署一个java maven项目流程通过gitlabjenkins部署一个docker容器项目流程通过gitlabjenkins 部署k8s项目流程3.2 SpringCloud 与 K8s 区别与选型Spring Cloud开发侧微服务框架提供服务发现、负载均衡、配置管理侧重代码开发Kubernetes运维侧容器编排平台提供自动扩缩容、滚动升级、故障自愈侧重容器运维最佳实践不建议两者混用推荐SpringBoot KubernetesSpringBoot 开发业务K8s 管理容器服务。3.3 自动化部署通用流程开发人员将代码 Push 至 GitLab 代码仓库GitLab 触发 Jenkins 构建任务WebHook 钩子Jenkins 拉取最新代码调用 Maven 编译打包制作 Docker 镜像推送至私有镜像仓库远程服务器拉取镜像启动容器 / 服务完成自动化部署。四、实战Jenkins 部署 Java 项目 jpress4 种方式4.1 方式一传统方式部署 Java Web 项目传统部署直接打包代码通过 SSH 传输至远程服务器执行启动脚本无需容器化。Jenkins 项目配置自定义工作空间/data/jenkins/jpress源码管理选择 Git配置 GitLab 仓库地址git172.16.213.65:ops/jpress.git选择配置好的 GitLab SSH 凭据构建环境调用 Maven 执行打包命令mvn clean install -Dmaven.test.skiptrue远程部署配置SSH 插件配置 SSH 服务器连接信息传输启动脚本start-jpress.sh至远程服务器执行远程部署脚本rm -rf /usr/local/jpress mkdir /usr/local/jpress mv /usr/local/start-jpress.sh /usr/local/jpress chmod 755 /usr/local/jpress/start-jpress.sh远程启动脚本start-jpress.shcd /usr/local/jpress unzip starter-4.0.zip sed -i /Dundertow.devMode/s/^#//g jpress.sh sed -i /java.awt.headless/s/^/#/ jpress.sh sed -i /output.log\ 21/s/#//g jpress.sh sed -i 2i source /etc/profile jpress.sh ./jpress.sh start控制台输出如下jpress页面如下4.2 方式二Blue Ocean 可视化部署 Docker 镜像制作Blue Ocean 是 Jenkins 可视化流水线界面支持一键构建 Docker 镜像推送至私有仓库。步骤 1拉取代码 编译打包先创建流水线需要将密钥放置到GitlabGit 拉取 master 分支代码Shell 脚本执行 Maven 打包/usr/local/maven/bin/mvn clean install -Dmaven.test.skiptrue步骤 2编写 Dockerfile制作镜像# 构建基础镜像 cd docker docker build . -t jpress-base:${base_version} -f ./Dockerfile.base cd .. # 编写业务镜像Dockerfile cat dockerfile_jpress EOF FROM jpress-base:${base_version} LABEL maintainergaojf WORKDIR /opt/jpress COPY ./starter/target/starter-4.0/ /opt/jpress/ COPY ./docker/files/jpress.sh /opt/jpress/jpress1.sh COPY ./docker/files/jboot.properties /opt/jpress/config/jboot.properties RUN chmod x /opt/jpress/jpress1.sh \ rm -rf /opt/jpress/jpress.bat \ rm -rf /opt/jpress/config/undertow.txt \ rm -rf /opt/jpress/config/install.lock EXPOSE 8080 CMD [/opt/jpress/jpress1.sh, start] EOF # 构建业务镜像 docker build -t 172.16.213.65:4567/ops/images/jpress:${jpress_version} -f dockerfile_jpress .步骤 3推送镜像至私有仓库# 跳过重复构建 if [ $GIT_PREVIOUS_SUCCESSFUL_COMMIT $GIT_COMMIT ];then echo skip build exit 0 fi# 登录私有仓库并推送镜像 docker login 192.168.38.137:4567 -u root -p xxxxxx docker push 192.168.38.137:4567/ops/images/jpress:${jpress_version}4.3 方式三SSH 插件 Docker-Compose 编排部署使用 Docker-Compose 一键编排jpress 应用 MySQL 数据库实现服务依赖、持久化、重启策略管理通过 SSH 插件远程执行编排脚本。远程执行 Docker-Compose 脚本cd /data1 test -d compose || mkdir compose cd compose cat docker-compose.yml EOF version: 3.1 services: db: image: mysql:5.7 command: --default-authentication-pluginmysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: jpress MYSQL_DATABASE: jpress MYSQL_USER: jpress MYSQL_PASSWORD: jpress volumes: - ./docker_volumes/mysql:/var/lib/mysql jpress: depends_on: - db links: - db image: 172.16.213.65:4567/ops/images/jpress:v1.2 ports: - 8000:8080 ulimits: nofile: soft: 65536 hard: 65536 restart: always environment: TZ: Asia/Shanghai JPRESS_DB_HOST: db JPRESS_DB_PORT: 3306 JPRESS_DB_NAME: jpress JPRESS_DB_USER: jpress JPRESS_DB_PASSWORD: jpress volumes: - ./docker_volumes/webapp/attachment:/opt/jpress/webapp/attachment - ./docker_volumes/webapp/addons:/opt/jpress/webapp/addons - ./docker_volumes/webapp/WEB-INF/addons:/opt/jpress/webapp/WEB-INF/addons - ./docker_volumes/webapp/wp-content:/opt/jpress/webapp/wp-content - ./docker_volumes/webapp/templates/dockers:/opt/jpress/webapp/templates/dockers EOF # 重启服务 docker-compose down docker-compose up -d4.4 方式四Pipeline 流水线实现自动化部署Jenkins Pipeline 通过声明式 / 脚本式语法编排完整 CI/CD 流程支持分阶段可视化是企业级项目首选部署方式。4.4.1 Pipeline 核心概念Node执行流水线的 Jenkins 节点Stage流程阶段分为代码拉取、构建打包、远程传输、启动服务Step最小执行单元支持 Shell、Git、SSH 等操作语法分为声明式标准化、脚本式灵活自定义推荐声明式。4.4.2 jpress 项目 Pipeline 完整脚本pipeline { agent any stages { stage(git clone code) { steps { ws(dir: /data/jenkins/work2) { git(url: git172.16.213.65:ops/jpress.git, branch: master) sh /usr/local/maven/bin/mvn clean install -D maven.test.skiptrue } } } stage(Copy to Remote Host) { steps { ws(dir: /data/jenkins/work2) { script { def remoteHost 172.16.213.226 def remoteUser root def shellScript #!/bin/bash ssh ${remoteUser}${remoteHost} rm -rf /usr/local/jpsweb mkdir -p /usr/local/jpsweb scp starter/target/starter-4.0.zip ${remoteUser}${remoteHost}:/usr/local/jpsweb scp start-jpress1.sh ${remoteUser}${remoteHost}:/usr/local/jpsweb ssh ${remoteUser}${remoteHost} cd /usr/local/jpsweb unzip starter-4.0.zip writeFile file: remote_script.sh, text: shellScript } } } } stage(Execute Remote Script) { steps { ws(dir: /data/jenkins/work2) { sh chmod x remote_script.sh sh ./remote_script.sh } } } stage(Start Service) { steps { script { def remoteHost 172.16.213.226 def remoteUser root sh ssh ${remoteUser}${remoteHost} chmod 755 /usr/local/jpsweb/start-jpress1.sh sh ssh ${remoteUser}${remoteHost} /usr/local/jpsweb/start-jpress1.sh } } } } }4.4.3 脚本使用方法Jenkins 新建任务选择【流水线】流水线定义选择【Pipeline script】粘贴上述脚本配置凭据与服务器信息保存后直接构建。五、总结本文完整实现了Jenkins 从环境搭建、基础配置到传统部署、容器化部署、流水线部署的全流程实战覆盖了 Java 项目 CI/CD 的主流方案传统部署快速上线适合简单单体项目Docker 镜像部署标准化环境适配多服务器Docker-Compose 编排管理多服务依赖简化运维Pipeline 流水线企业级标准方案流程可视化、可复用、易维护。Jenkins 结合 GitLab、Maven、Docker、K8s可完全打通开发到运维的自动化链路减少人工操作降低上线风险提升迭代效率是后端开发、运维工程师必备核心技能。