Jenkins CI/CD 自动化部署流水线
本项目将在已经部署好的高可用 Web 集群 + ELK 日志系统基础上,搭建一套完整的 Jenkins 持续集成 / 持续部署流水线,实现代码从 Git 提交到自动部署到生产环境的全流程自动化。这是运维工程师求职的核心加分项,几乎所有互联网公司都要求掌握 Jenkins 自动化部署技能。项目架构图开发者vGit代码仓库vJenkins服务器| |v v代码拉取 → 代码编译 → 代码质量检查 →
一、项目概述
本项目将在已经部署好的高可用 Web 集群 + ELK 日志系统基础上,搭建一套完整的 Jenkins 持续集成 / 持续部署流水线,实现代码从 Git 提交到自动部署到生产环境的全流程自动化。
这是运维工程师求职的核心加分项,几乎所有互联网公司都要求掌握 Jenkins 自动化部署技能。
项目架构图:
开发者
|
v
Git代码仓库
|
v
Jenkins服务器
| |
v v
代码拉取 → 代码编译 → 代码质量检查 → 自动化测试 → 打包构建 → 自动部署
|
v
Nginx+Tomcat高可用集群
|
v
ELK日志分析系统
项目亮点:
- 与之前的高可用 Web 集群无缝对接
- 实现代码提交后自动触发部署
- 支持版本回滚,一键回退到任意历史版本
- 集成 Maven 自动化构建
二、虚拟机规划与硬件要求
新增 1 台虚拟机:
| 主机名 | IP 地址 | 操作系统 | CPU | 内存 | 硬盘 | 角色 |
|---|---|---|---|---|---|---|
| jenkins | 192.168.176.143 | CentOS 7.9 | 2 核 | 3GB | 40GB | Jenkins+Maven+Git |
总硬件要求:物理机 CPU≥16 核,内存≥24GB,硬盘≥280GB。如果内存不足,可以暂时关闭 ELK 集群,只保留 Jenkins 和 Web 集群。
三、环境准备(jenkins 节点执行)
1. 关闭防火墙和 SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
2. 配置主机名和 hosts 文件
hostnamectl set-hostname jenkins
cat >> /etc/hosts << EOF
192.168.176.133 ha1
192.168.176.134 ha2
192.168.176.135 nginx1
192.168.176.136 nginx2
192.168.176.137 tomcat1
192.168.176.138 tomcat2
192.168.176.143 jenkins
EOF
3. 配置时间同步
yum install -y ntpdate
ntpdate ntp.aliyun.com
echo "*/30 * * * * /usr/sbin/ntpdate ntp.aliyun.com >> /var/log/ntpdate.log 2>&1" | crontab -
4. 安装 JDK 21
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
mv /usr/local/jdk-21.0.11 /usr/local/jdk
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=.:\$JAVA_HOME/lib:\$JRE_HOME/lib
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
source /etc/profile
java -version

5. 安装 Maven 3.9.6
wget https://mirrors.huaweicloud.com/apache/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz
tar -zxvf apache-maven-3.9.6-bin.tar.gz -C /usr/local/
mv /usr/local/apache-maven-3.9.6 /usr/local/maven
# 更新环境变量
cat >> /etc/profile << EOF
export MAVEN_HOME=/usr/local/maven
export PATH=\$PATH:\$MAVEN_HOME/bin
EOF
source /etc/profile
mvn -v
6. 配置 Maven 阿里云镜像
# 1. 备份默认配置文件
mv /usr/local/maven/conf/settings.xml /usr/local/maven/conf/settings.xml.bak
# 2. 创建新的配置文件(直接复制整个命令执行)
cat > /usr/local/maven/conf/settings.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库目录,存放下载的依赖包 -->
<localRepository>/usr/local/maven/repository</localRepository>
<!-- 阿里云镜像,优先使用 -->
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云中央仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
<!-- 全局JDK 11配置 -->
<profiles>
<profile>
<id>jdk-11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
</profile>
</profiles>
</settings>
EOF
# 3. 创建本地仓库目录
mkdir -p /usr/local/maven/repository
# 4. 设置目录权限
chown -R root:root /usr/local/maven
7. 安装 Git
yum install -y git
git --version
四、详细部署步骤
第一部分:安装 Jenkins
1. 下载 Jenkins 2.504.2
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.504.2/jenkins.war /usr/local/
2. 启动 Jenkins
# 后台启动Jenkins,端口8080
nohup java -jar /usr/local/jenkins.war --httpPort=8080 &
# 等待1-2分钟,查看启动日志
tail -f nohup.out

3. 获取初始管理员密码
cat /root/.jenkins/secrets/initialAdminPassword
4. 访问 Jenkins Web 界面
打开浏览器访问:http://你的ip:8080
- 输入上面获取的初始密码
- 选择 "安装推荐的插件"
- 创建管理员用户
- 完成初始化

如果出现插件安装失败
第一步:先点击 "继续" 跳过插件安装
直接点击页面右下角的继续按钮,先进入 Jenkins 主界面。跳过插件安装不会影响 Jenkins 的基本功能,我们后面再手动安装需要的插件。
第二步:替换 Jenkins 插件源为清华大学镜像源
这是最根本的解决方案,替换后插件下载速度会从几 KB/s 变成几 MB/s。
1. 停止 Jenkins 进程
# 找到Jenkins进程ID
ps aux | grep jenkins | grep -v grep | awk '{print $2}' | xargs kill -9
2. 一键替换镜像源脚本
直接复制执行下面的命令,自动替换所有相关配置:
# 进入Jenkins主目录
cd /root/.jenkins
# 备份原配置文件
cp hudson.model.UpdateCenter.xml hudson.model.UpdateCenter.xml.bak
# 替换为清华大学镜像源
sed -i 's|https://updates.jenkins.io/update-center.json|https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json|g' hudson.model.UpdateCenter.xml
# 替换插件下载地址
sed -i 's|https://updates.jenkins.io/download|https://mirrors.tuna.tsinghua.edu.cn/jenkins|g' updates/default.json
3. 重启 Jenkins
nohup java -jar /usr/local/jenkins.war --httpPort=8080 &
# 等待1分钟,查看启动日志
tail -f nohup.out
第三步:重新安装必要插件
现在重新访问 Jenkins 界面:http://你的ip:8080
1. 进入插件管理页面
- 左侧菜单 → 系统管理 → 插件管理
- 点击 "高级" 选项卡
- 拉到最下面,点击 "立即获取",更新插件列表
2. 只安装你需要的必要插件
不需要安装所有推荐插件,只需要安装以下几个核心插件即可完成自动化部署:
- Git plugin:Git 代码管理
- Maven Integration plugin:Maven 构建支持
- SSH plugin:SSH 远程执行命令
- Pipeline:流水线支持(可选)
- Localization: Chinese (Simplified):中文语言包
3. 安装方法
- 在 "可选插件" 中搜索上面的插件名称
- 勾选需要安装的插件
- 点击 "安装无需重启"
- 等待安装完成
第四步:如果还是有问题,终极解决方案:手动上传插件
如果个别插件还是下载失败,可以手动下载插件文件,然后上传安装:
1. 清华大学 Jenkins 插件下载地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/
2. 安装方法
- 在上面的地址中找到你需要的插件,下载
.hpi文件 - 进入 Jenkins → 系统管理 → 插件管理 → 高级
- 拉到最下面的 "上传插件" 部分
- 选择下载好的
.hpi文件,点击 "上传"
第二部分:配置 Jenkins 全局工具
- 进入 Jenkins → 系统管理 → 全局工具配置
- 配置 JDK:
- 别名:JDK
- JAVA_HOME:
/usr/local/jdk
- 配置 Maven:
- 别名:Maven
- MAVEN_HOME:
/usr/local/maven
- 配置 Git:
- 别名:Git
- Path to Git executable:
/usr/bin/git
- 点击 "保存"
第三部分:配置 Jenkins 免密登录到 Tomcat 节点
Jenkins 需要通过 SSH 将打包好的 war 包部署到 Tomcat 服务器,所以需要配置免密登录。
1. 在 Jenkins 服务器生成 SSH 密钥对
ssh-keygen -t rsa
# 连续按三次回车,使用默认配置
2. 将公钥复制到 Tomcat 节点
ssh-copy-id root@192.168.176.137
# 输入Tomcat节点的root密码
3. 测试免密登录
ssh root@192.168.176.137
# 不需要输入密码就能登录,说明配置成功
第四部分:创建第一个自动化部署任务
1. 准备测试代码
在 Git 上创建一个简单的 Java Web 项目,或者使用我提供的测试代码:
# 在Jenkins服务器上创建测试项目
mkdir -p /data/test-project/src/main/webapp/WEB-INF
# 创建index.jsp
cat > /data/test-project/src/main/webapp/index.jsp << EOF
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Jenkins自动化部署测试</title>
</head>
<body>
<h1>Jenkins自动化部署成功!</h1>
<p>部署时间:<%= new java.util.Date() %></p>
<p>服务器IP:<%= request.getLocalAddr() %></p>
</body>
</html>
EOF
# 创建web.xml
cat > /data/test-project/src/main/webapp/WEB-INF/web.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
EOF
# 创建pom.xml
cat > /data/test-project/pom.xml << EOF
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>test-project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>test</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
</plugins>
</build>
</project>
EOF
登录到 Jenkins 服务器,执行以下命令:
# 1. 进入项目目录
cd /data/test-project
# 2. 查看是否有.git文件夹(正常应该有,没有就是没初始化成功)
ls -la | grep .git
# 3. 如果没有.git文件夹,重新初始化
git init
# 4. 配置Git用户信息
git config --global user.name "admin"
git config --global user.email "admin@example.com"
# 5. 添加所有文件并提交
git add .
git commit -m "初始提交:创建测试项目"
# 6. 验证Git仓库是否正常
git status
2. 在 Jenkins 中创建自由风格项目
- 点击 "新建任务"
- 输入任务名称:
test-project-deploy - 选择 "自由风格的软件项目"
- 点击 "确定"
3. 配置源码管理
- 选择 "Git"
- Repository URL:
file:///data/test-project(本地 Git 仓库,测试用) - 分支:
*/master
4. 配置构建触发器
- 勾选 "Poll SCM"
- 日程表:
* * * * *(每分钟检查一次代码变化,有变化自动构建)
5. 配置构建步骤
- 点击 "增加构建步骤" → "调用顶层 Maven 目标"
- Maven 版本:选择你配置的 Maven3.9.6
- 目标:
clean package -Dmaven.test.skip=true
6. 配置部署步骤
- 点击 "增加构建步骤" → "执行 shell"
- 输入以下脚本:
#!/bin/bash
# 部署脚本
# 定义变量
TOMCAT_IP="192.168.176.136" #注意ip
TOMCAT_HOME="/usr/local/tomcat"
WAR_NAME="test.war"
WAR_PATH="/root/.jenkins/workspace/test-project-deploy/target/${WAR_NAME}"
# 1. 停止Tomcat
ssh root@${TOMCAT_IP} "${TOMCAT_HOME}/bin/shutdown.sh"
sleep 5
# 2. 删除旧的war包和解压目录
ssh root@${TOMCAT_IP} "rm -rf ${TOMCAT_HOME}/webapps/${WAR_NAME} ${TOMCAT_HOME}/webapps/test"
# 3. 上传新的war包
scp ${WAR_PATH} root@${TOMCAT_IP}:${TOMCAT_HOME}/webapps/
# 4. 启动Tomcat
ssh root@${TOMCAT_IP} "${TOMCAT_HOME}/bin/startup.sh"
sleep 10
# 5. 验证部署是否成功
if curl -s http://${TOMCAT_IP}:8080/test/ | grep "Jenkins自动化部署成功"; then
echo "部署成功!"
exit 0
else
echo "部署失败!"
exit 1
fi
7. 保存并构建
- 点击 "保存"
- 点击 "立即构建"
- 查看构建历史,点击控制台输出,查看构建过程
如果出现构建失败,是因为这是 Jenkins 2.400 + 版本新增的安全机制,默认禁止从本地文件系统的 Git 仓库拉取代码,防止恶意代码通过本地文件系统攻击 Jenkins 服务器

解决方案一:临时允许本地检出(推荐测试环境使用)
第一步:停止 Jenkins 进程
ps aux | grep jenkins | grep -v grep | awk '{print $2}' | xargs kill -9
第二步:添加启动参数允许本地 Git 检出
# 启动时添加系统属性参数
nohup java -Xms2g -Xmx2g -Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true -jar /usr/local/jenkins.war --httpPort=8080 &
第三步:重新构建任务
等待 Jenkins 启动完成后,回到 Jenkins 界面,点击 "立即构建",这次就可以正常拉取代码了。
解决方案二:使用远程 Git 仓库(生产环境推荐)
在生产环境中,强烈建议使用远程 Git 仓库(如 Gitee、GitHub 或 GitLab),而不是本地仓库。你可以在 Gitee 上创建一个免费的私有仓库,然后将代码推送到远程仓库,再在 Jenkins 中配置远程仓库地址。
操作步骤:
- 在 Gitee 上创建一个私有仓库
- 将本地代码推送到远程仓库:
cd /data/test-project git remote add origin https://gitee.com/你的用户名/test-project.git git push -u origin master - 在 Jenkins 中配置远程仓库地址:
https://gitee.com/你的用户名/test-project.git - 配置 Gitee 的用户名和密码凭证
控制台输入为绿色成功

验证部署结果
构建完成后,访问 Tomcat 服务器的测试页面:
http://192.168.176.136:8080/test/

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)