当前位置:首页 > 随笔 > 正文内容

在虚拟机中配置Jenkins自动化部署Spring Boot应用环境

访客 随笔 2026年9月24日 13

本指南将详细介绍如何在虚拟机环境中从零开始搭建持续集成/持续部署(CI/CD)系统,以便自动化部署Spring Boot应用程序。我们将涵盖虚拟机操作系统、Java开发工具包(JDK)、Apache Maven以及Jenkins服务器的安装与配置过程。

一、虚拟机环境初始化

首先,我们需要准备一个Linux虚拟机环境。推荐使用VMware Workstation结合Rocky Linux操作系统进行部署。

1.1 软件存储目录与权限设置

为了统一管理安装的软件,我们创建一个专用的目录,并赋予必要的写入权限,以便后续通过SCP或SSH工具进行文件传输。

sudo mkdir -p /opt/application_software/
sudo chmod 777 /opt/application_software/

1.2 Git版本控制工具安装

Git是进行代码版本控制和从远程仓库拉取代码的必备工具。在大多数Linux发行版中,可以通过包管理器直接安装。

sudo yum install git -y # 对于基于RHEL的系统如Rocky Linux
# 或者 sudo apt install git -y # 对于基于Debian的系统如Ubuntu

二、核心开发环境组件配置

2.1 Java开发工具包(JDK)安装与环境变量

Spring Boot应用依赖于Java运行时环境。我们将安装JDK并配置其环境变量。

  1. 下载JDK: 访问Oracle官网(或Adoptium等OpenJDK提供商)下载适用于Linux x64架构的JDK压缩包,例如 jdk-21_linux-x64_bin.tar.gz。将其传输到虚拟机的 /opt/application_software/ 目录。
  2. 解压文件:
cd /opt/application_software/
tar -xzvf jdk-21_linux-x64_bin.tar.gz
  1. 配置环境变量: 创建一个脚本文件来管理Java相关的环境变量。
sudo vi /etc/profile.d/java_path_setup.sh

在文件中添加以下内容:

export JAVA_HOME=/opt/application_software/jdk-21.0.5
export PATH=$JAVA_HOME/bin:$PATH
  1. 使配置生效并验证:
source /etc/profile.d/java_path_setup.sh
java -version

2.2 Apache Maven安装与镜像配置

Maven是用于项目构建和依赖管理的工具。我们将安装Maven并配置阿里云镜像以加速依赖下载。

  1. 下载与解压Maven:
cd /opt/application_software/
wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar -zxvf apache-maven-3.8.8-bin.tar.gz
  1. 配置Maven环境变量: 为了方便命令行使用,同样配置其环境变量。可以与Java环境变量文件合并,或单独创建。
sudo vi /etc/profile.d/maven_path_setup.sh

在文件中添加以下内容:

export MAVEN_HOME=/opt/application_software/apache-maven-3.8.8
export PATH=$MAVEN_HOME/bin:$PATH

使配置生效并验证:

source /etc/profile.d/maven_path_setup.sh
mvn -version
  1. 配置阿里云Maven镜像: 修改Maven的 settings.xml 文件以使用阿里云镜像,加速项目依赖下载。
vim /opt/application_software/apache-maven-3.8.8/conf/settings.xml

在 <mirrors> 标签内添加以下配置:

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

三、Jenkins持续集成服务器部署

3.1 Jenkins WAR包下载与启动

Jenkins是实现CI/CD的核心工具。我们将下载其WAR包并以独立模式运行。

  1. 下载Jenkins WAR包: 前往Jenkins官网下载最新版本的 jenkins.war,并将其放置于 /opt/application_software/ 目录。
  2. 创建Jenkins工作目录: 此目录将存储Jenkins的配置、插件和工作区数据。
sudo mkdir -p /var/lib/jenkins_data/workspace
  1. 启动Jenkins服务: 使用 nohup 命令在后台启动Jenkins,并配置工作目录和端口。
nohup java -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true \
           -DJENKINS_HOME=/var/lib/jenkins_data/workspace \
           -jar /opt/application_software/jenkins.war \
           --httpPort=8080 > /var/log/jenkins_startup.log 2>&1 &

在首次启动时,Jenkins会在工作目录下生成一个初始管理员密码,你需要从日志或指定文件中获取它来解锁Jenkins。例如,查看 /var/log/jenkins_startup.log 或 /var/lib/jenkins_data/workspace/secrets/initialAdminPassword。

  1. 配置防火墙: 开放Jenkins使用的8080端口,以便从外部访问。
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

现在,你可以通过浏览器访问 http://<虚拟机IP地址>:8080 进行初始设置。

3.2 安装Jenkins核心插件

登录Jenkins后,按照提示安装推荐的插件。此外,为了后续的CI/CD流程,还需要手动安装一些关键插件:

  • Git Plugin (通常已安装)
  • Maven Integration plugin
  • SSH Agent Plugin 或 SSH plugin (用于通过SSH连接远程服务器执行命令)
  • Localization: Chinese (Simplified) (用于汉化界面)

进入"管理 Jenkins" -> "插件管理" -> "可选插件" 搜索并安装这些插件。

3.3 Jenkins全局工具配置

在Jenkins中配置Git、JDK和Maven的安装路径,以便Jenkins在执行构建任务时能够找到这些工具。

进入"管理 Jenkins" -> "全局工具配置":

  • Git配置: 配置Git的安装路径。

    Git配置

  • JDK配置: 配置之前安装的JDK路径。

    JDK配置

  • Maven配置: 配置之前安装的Maven路径。

    Maven配置

四、SSH凭据管理与Git仓库集成

4.1 生成SSH密钥对

为了让Jenkins能够通过SSH协议访问私有Git仓库,我们需要在虚拟机上生成SSH密钥对。

ssh-keygen -t rsa -b 4096 -C "jenkins-deployment-key"

按照提示完成密钥生成。私钥将保存到 ~/.ssh/id_rsa,公钥保存到 ~/.ssh/id_rsa.pub。

4.2 将公钥添加到Git仓库

复制公钥内容:

cat ~/.ssh/id_rsa.pub

将输出的公钥字符串添加到你的Git代码托管平台(如GitHub, GitLab, Gitee等)的SSH密钥管理页面。这将允许你的虚拟机免密访问该Git仓库。

4.3 在Jenkins中添加SSH私钥凭据

  1. 进入"管理 Jenkins" -> "管理凭据" -> "系统" -> "全局凭据" -> "添加凭据"。
  2. 选择类型为"SSH Username with private key"。
  3. Private Key: 选择"From a file on Jenkins master"或直接粘贴 ~/.ssh/id_rsa 文件的内容。

    添加SSH凭据

    粘贴私钥

  4. 填写其他必要信息,如ID和描述,然后点击"创建"。

创建成功

重要提示:首次连接Git仓库

在Jenkins中配置Git仓库之前,建议在虚拟机终端手动执行一次 git clone <your_repository_ssh_url> 命令。这有助于确认SSH连接没有问题,并会将Git仓库的主机指纹添加到 ~/.ssh/known_hosts 文件中,避免Jenkins在首次尝试连接时因主机指纹确认问题而失败。

首次Git Clone

五、构建与部署Spring Boot项目

5.1 创建新的Maven项目

  1. 在Jenkins首页,点击"新建任务"。
  2. 输入任务名称,选择"构建一个Maven项目",点击"确定"。

新建Maven项目

5.2 配置项目源码管理

在项目配置页面,找到"源码管理"部分:

  • 选择"Git"。
  • 填写你的Git仓库SSH URL。
  • 在"Credentials"下拉菜单中选择之前创建的SSH私钥凭据。

5.3 配置Maven构建步骤

在"Build"部分,配置Maven的构建目标:

  • Root POM: 如果你的pom.xml在项目根目录,通常是 pom.xml。
  • Goals: 输入Maven构建目标,例如 clean install package -DskipTests。

5.4 配置部署Shell脚本

在"构建后操作"或"Execute Shell"步骤中添加部署脚本。由于Jenkins默认会杀死子进程,需要添加 BUILD_ID=DONT_KILL_ME_JENKINS 来确保Java进程在Jenkins任务结束后仍然运行。

BUILD_ID=DONT_KILL_ME_JENKINS
# 进入你的Spring Boot应用打包后的jar所在的目录
cd your_project_root/target
# 以后台方式启动Spring Boot应用,并将输出重定向到日志文件
nohup java -jar your-springboot-application-name.jar > app_runtime.log 2>&1 &

5.5 执行构建与验证

保存项目配置后,点击"立即构建"来触发构建任务。你可以在"Console Output"中查看构建日志。

立即构建

如果一切配置正确,Spring Boot应用程序将在虚拟机中成功启动。

部署成功示意图

相关文章

可以按小时收费的VPS

很多 VPS 提供商都支持 按小时计费(hourly billing),想短期试用 / 临时搭建节点、测试网络、短期项目等场景非常合适。下面是当前最主流且靠谱的按小时 VPS 选项,分别按不同需求场景整理: 1. Vultr(全球节点,包括日本) 按小时计费 可选机房:东京 / 大阪 / 洛杉矶 / 法兰克福 / 伦敦 … 支持 PayPal(部分情况),但更常用信用卡/PayPal+卡价格参考$...

在 iPhone 上下载国外App

地区/国家限制App Store 会根据 Apple ID 的国家或地区限制应用下载。如果你的 Apple ID 绑定的是中国大陆,就可能无法下载 OpenAI 官方的 ChatGPT 应用,因为它在大陆 App Store 不上架。解决办法:换成美国、加拿大、香港等地区的 Apple ID。或者在现有 Apple ID 上更改地区。注册一个国外 Apple ID(推荐)比如注册 美国区 Appl...

Node.js 中的异步编程:回调与 Promise

Node.js 是一个基于 JavaScript 构建的单线程、非阻塞运行环境,它通过异步编程机制来高效处理多个操作。在执行如文件读取、API 请求或数据库查询等任务时,Node.js 不会等待这些操作完成,而是使用回调函数和 Promise 来避免阻塞主线程。 回调方式实现异步 那么当异步操作完成后,Node.js 如何知道接下来要做什么呢?这就要用到 回调函数(callback)。 回调本质上...

Selenium自动化测试入门指南

Selenium自动化测试入门指南

什么是自动化测试? 自动化测试是指利用软件工具自动执行测试用例,模拟用户操作,如打开网页、点击链接、输入文本等,并验证结果是否符合预期。 其主要优点包括: 大幅减少人工成本 测试速度快 可以在非工作时间运行 支持持续集成和交付 然而,它也存在一些局限性,例如开发成本较高、不适合快速变化的项目、依赖稳定的UI界面等。 自动化测试的应用条件 适合引入自动化测试的情况包括: 手动测试耗时且需要大量...

MariaDB Galera集群故障快速恢复指南

OpenStack控制节点采用三节点MariaDB Galera集群架构。当数据库集群因故障重启时,有时会出现Galera集群无法正常启动的问题。虽然有多种方法可以恢复数据库服务,但如何实现快速启动同时确保数据完整性呢? 通过分析日志发现,MariaDB Galera集群节点宕机时会在日志中输出以下信息: [Note] WSREP: 新集群视图:全局状态: 874d8e7e-5980-11e8-8...

Android 中 EventBus 的通信机制与实现原理深度解析

EventBus 核心设计思想 EventBus 是一个基于观察者模式的事件总线框架,广泛应用于 Android 平台以实现组件解耦。它通过中心化的消息分发机制,使不同层级、不同线程的对象能够以"发布-订阅"方式通信,避免了传统接口回调或广播带来的强依赖问题。 核心角色说明 事件(Event):任意 Java 对象,作为数据载体,如网络状态变更通知、用户登录信息等。 发布者(Publi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。