当前位置: 首页 > news >正文

Jenkins CI/CD 自动化部署流水线

一、项目概述

本项目将在已经部署好的高可用 Web 集群 + ELK 日志系统基础上,搭建一套完整的 Jenkins 持续集成 / 持续部署流水线,实现代码从 Git 提交到自动部署到生产环境的全流程自动化。

这是运维工程师求职的核心加分项,几乎所有互联网公司都要求掌握 Jenkins 自动化部署技能。

项目架构图

开发者 | v Git代码仓库 | v Jenkins服务器 | | v v 代码拉取 → 代码编译 → 代码质量检查 → 自动化测试 → 打包构建 → 自动部署 | v Nginx+Tomcat高可用集群 | v ELK日志分析系统

项目亮点

  • 与之前的高可用 Web 集群无缝对接
  • 实现代码提交后自动触发部署
  • 支持版本回滚,一键回退到任意历史版本
  • 集成 Maven 自动化构建

二、虚拟机规划与硬件要求

新增 1 台虚拟机

主机名IP 地址操作系统CPU内存硬盘角色
jenkins192.168.176.143CentOS 7.92 核3GB40GBJenkins+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. 在 "可选插件" 中搜索上面的插件名称
  2. 勾选需要安装的插件
  3. 点击 "安装无需重启"
  4. 等待安装完成

第四步:如果还是有问题,终极解决方案:手动上传插件

如果个别插件还是下载失败,可以手动下载插件文件,然后上传安装:

1. 清华大学 Jenkins 插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/

2. 安装方法
  1. 在上面的地址中找到你需要的插件,下载.hpi文件
  2. 进入 Jenkins → 系统管理 → 插件管理 → 高级
  3. 拉到最下面的 "上传插件" 部分
  4. 选择下载好的.hpi文件,点击 "上传"

第二部分:配置 Jenkins 全局工具

  1. 进入 Jenkins → 系统管理 → 全局工具配置
  2. 配置 JDK:
    • 别名:JDK
    • JAVA_HOME:/usr/local/jdk
  3. 配置 Maven:
    • 别名:Maven
    • MAVEN_HOME:/usr/local/maven
  4. 配置 Git:
    • 别名:Git
    • Path to Git executable:/usr/bin/git
  5. 点击 "保存"

第三部分:配置 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 中创建自由风格项目
  1. 点击 "新建任务"
  2. 输入任务名称:test-project-deploy
  3. 选择 "自由风格的软件项目"
  4. 点击 "确定"
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 中配置远程仓库地址。

操作步骤:
  1. 在 Gitee 上创建一个私有仓库
  2. 将本地代码推送到远程仓库:
    cd /data/test-project git remote add origin https://gitee.com/你的用户名/test-project.git git push -u origin master
  3. 在 Jenkins 中配置远程仓库地址:https://gitee.com/你的用户名/test-project.git
  4. 配置 Gitee 的用户名和密码凭证

控制台输入为绿色成功

验证部署结果

构建完成后,访问 Tomcat 服务器的测试页面:

http://192.168.176.136:8080/test/

http://www.jsqmd.com/news/812467/

相关文章:

  • AI 时代远程加密勒索软件防御机理研究 —— 基于数据层数学检测视角
  • 全球轻型巡飞弹药行业发展现状、机遇与前景分析
  • PromptScript Registry:统一AI编程助手配置,提升开发效率与代码一致性
  • for语句
  • 同一个大模型,CodeBuddy 和 Trae 出来效果不一样?原因在这!
  • OBS鼠标光标特效实战:用LuaJIT与HLSL打造直播视觉焦点
  • Diana风格Prompt工程全解析,深度拆解12类失效案例与97.3%成功率的黄金模板组合
  • 开源Cursor增强包:社区最佳实践提升AI编程效率
  • 图片重复检测革命:AntiDupl.NET如何智能清理你的数字相册
  • 3步自动化优化:智能管理Cursor AI开发环境的革命性方案
  • Windows AI模型管理工具:openclaw-provider-manager 实现多模型自动故障转移与配额管理
  • 终极免费音频编辑指南:Audacity如何让你轻松制作专业级音频
  • 透明背景图片制作方法,一个小程序就能搞定!
  • 带标注的中国车牌识别数据集,可识别车牌中的地区和车牌号码数据集,识别率81.34%,970张图,支持yolo,coco json,voc xml,文末有模型训练代码
  • 宽禁带半导体GaN与SiC:从物理优势到电源设计实战
  • 假冒 TronLink 钱包 Chrome 扩展攻击机理与 Web3 钱包安全防御研究
  • Gemini实时语音转录+Pixel硬件级降噪,会议记录准确率提升至99.2%,你还在手动整理?
  • 群晖NAS上运行百度网盘:终极免费解决方案
  • LeetCode 字典树与哈希表对比题解
  • 魔女的夜宴 2026最新汉化版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)pc手机通用
  • 在Nodejs后端服务中集成Taotoken调用多模型API的实践
  • VBA宏编程入门——VBA在Excel投资分析中的自动化应用
  • 静态分析工具Context-Drift:预防代码依赖与API契约漂移
  • 驾驶员监控系统(DMS)的七大迷思与技术真相
  • WeChatIntercept:彻底解决Mac微信消息撤回困扰的专业解决方案
  • 量子自编码器在图像分类中的应用与优化
  • Arm MPAMF_IDR寄存器解析与应用实践
  • 海思Hi3559AV100添加U盘自动挂载
  • 成都首创锦榜教育联系电话及单招服务核心信息 - 优质品牌商家
  • 从五月开始学黑客技术,3个月后你会惊呼:原来靠技术搞钱这么爽!