news 2026/5/14 2:17:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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/

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 2:13:07

收藏!大模型不会抢走你的工作,而是让你更强大!

大模型将自动化部分任务而非取代整个岗位&#xff0c;职场人应主动学习使用大模型&#xff0c;转变工作重心&#xff0c;培养批判性思维、沟通协作等AI难以替代的能力&#xff0c;实现人机协作&#xff0c;提升工作价值。大模型是解放而非替代&#xff0c;促进人类追求更高层次…

作者头像 李华
网站建设 2026/5/14 2:13:05

基于MCP协议构建AI Agent本地工具链:alterlab-mcp-server实践指南

1. 项目概述与核心价值最近在折腾AI Agent的开发&#xff0c;发现一个挺有意思的项目&#xff0c;叫alterlab-mcp-server。这个项目在GitHub上由RapierCraft维护&#xff0c;本质上是一个模型上下文协议&#xff08;Model Context Protocol&#xff0c; MCP&#xff09;的服务器…

作者头像 李华
网站建设 2026/5/14 2:08:30

VLC for Android:如何用开源技术重新定义你的移动观影体验?

VLC for Android&#xff1a;如何用开源技术重新定义你的移动观影体验&#xff1f; 【免费下载链接】vlc-android VLC for Android, Android TV and ChromeOS 项目地址: https://gitcode.com/gh_mirrors/vl/vlc-android 想象一下这个场景&#xff1a;你在手机上找到了一…

作者头像 李华
网站建设 2026/5/14 2:05:04

近屿AI学:考研后转AI,他把10K拿稳了

考研结束那几天&#xff0c;周砚&#xff08;化名&#xff09;没有想象中轻松。别人问他接下来去哪&#xff0c;他答得很模糊。电子信息工程出身&#xff0c;有Python基础&#xff0c;可真要找工作时&#xff0c;他发现自己缺的不是一门课&#xff0c;而是一条能走进岗位的路。…

作者头像 李华