目录
[一、先搞懂 Jenkins 流程的核心概念(新手必知)](#一、先搞懂 Jenkins 流程的核心概念(新手必知))
[二、Jenkins 典型 CI/CD 完整流程(通用步骤)](#二、Jenkins 典型 CI/CD 完整流程(通用步骤))
[步骤 1:前置准备(环境与权限)](#步骤 1:前置准备(环境与权限))
[步骤 2:创建并配置流水线(核心)](#步骤 2:创建并配置流水线(核心))
[步骤 3:设置触发器(决定 "什么时候执行")](#步骤 3:设置触发器(决定 “什么时候执行”))
[步骤 4:执行自动化流程(核心执行环节)](#步骤 4:执行自动化流程(核心执行环节))
[步骤 5:流程监控与复盘](#步骤 5:流程监控与复盘)
[准备 Maven 的settings.xml文件(解决 http 协议支持问题)](#准备 Maven 的settings.xml文件(解决 http 协议支持问题))
[创建 Jenkins 数据目录(持久化配置)](#创建 Jenkins 数据目录(持久化配置))
在开始之前先回顾jenkins****流程
Jenkins 作为主流的自动化构建部署工具,其流程核心是把 "代码提交→构建→测试→部署" 的手动环节全部自动化。
一、先搞懂 Jenkins 流程的核心概念(新手必知)
在讲流程前,先明确几个关键术语,避免后续理解混乱:
- 任务(Job/Item):Jenkins 的最小执行单元(比如 "构建一个 Java 项目" 就是一个任务);
- 流水线(Pipeline):把多个任务串联成的完整自动化流程(现在主流用法,推荐);
- Jenkinsfile:定义 Pipeline 的脚本文件(推荐存在代码仓库,实现 "流水线即代码");
- 节点(Node):执行任务的机器(可以是 Jenkins 本机、虚拟机、Docker 容器等);
- 触发器(Trigger):触发流程执行的条件(比如代码提交、定时执行、手动点击);
- 阶段(Stage):Pipeline 的逻辑分段(比如 "拉代码""构建""测试""部署" 各算一个阶段)。
二、Jenkins 典型 CI/CD 完整流程(通用步骤)
不管是 Java、前端、Python 项目,核心流程都围绕 "准备→配置→触发→执行→复盘" 展开,具体步骤如下:
步骤 1:前置准备(环境与权限)
这是流程的基础,先把 Jenkins 的运行环境配置好:
- 部署 Jenkins:安装在服务器 / 虚拟机(也可直接用 Docker 运行,更便捷);
- 配置依赖工具:根据项目需求安装 JDK、Maven/Gradle、Git、Docker、Node.js 等(在 Jenkins 的 "全局工具配置" 里设置);
- 配置凭证:保存代码仓库(Git/GitLab)、服务器登录、镜像仓库的账号 / 密钥(避免明文暴露)。
步骤 2:创建并配置流水线(核心)
这一步是定义 "自动化要做什么",推荐用 Pipeline(流水线)方式:
- 新建任务:在 Jenkins 页面点击 "新建任务",选择 "流水线(Pipeline)" 类型;
- 定义流程逻辑:
- 方式 1(推荐):选择 "从 SCM 获取 Jenkinsfile",指定代码仓库地址和 Jenkinsfile 的路径(把流程脚本和代码一起管理);
- 方式 2:直接在 Jenkins 页面写 "Pipeline Script"(适合简单测试,不推荐生产用)。
步骤 3:设置触发器(决定 "什么时候执行")
配置流程的触发条件,常见类型:
- 手动触发:点击 "立即构建",适合调试或紧急发布;
- 自动触发:
- 代码提交触发:配置 Git 仓库的 WebHook,代码 push/merge 后自动执行;
- 定时触发:用 Cron 表达式(比如每天凌晨 2 点执行,
0 2 * * *); - 上游任务触发:其他 Jenkins 任务执行完成后触发当前流程。
步骤 4:执行自动化流程(核心执行环节)

- 拉取代码(SCM Checkout):从 Git/GitLab 等仓库拉取最新代码到 Jenkins 节点;
- 代码构建:编译代码、打包制品(比如 Java 项目打 jar 包、前端项目打 dist 包、构建 Docker 镜像);
- 自动化测试:运行单元测试、集成测试(比如 JUnit、pytest),测试不通过则直接终止流程;
- 制品归档:把构建好的包 / 镜像保存到仓库(比如 Maven 仓库 Nexus、Docker 镜像仓库);
- 部署发布:把测试通过的制品部署到目标环境(开发 / 测试 / 生产,比如部署到 Docker 容器、虚拟机);
- 结果通知:流程结束后推送结果(邮件、钉钉 / 企业微信、Slack),失败则提示具体原因。
步骤 5:流程监控与复盘
- 查看构建日志:Jenkins 页面会记录每一步的执行日志,失败时重点看日志定位问题;
- 重试 / 回滚:失败则修复代码 / 配置后重试,部署出错可回滚到上一版本;
- 优化流程:比如并行执行测试、缩短构建时间、增加更多校验环节。
三,项目实战
环境部署
主机1:192.168.10.61 安装服务:jenkins:2.480、redis-7.4.1、mysql-8.0.39、spring boot、
nginx-1.2.6.2
主机2:192.168.10.60 安装服务: docker-20.10.18 、 gitlab-10.7.5
关闭安全增强功能

主机1已安装docker 主机2未安装


在主机2部署与配置 gitlab
拉取镜像并创建工作,目录和赋予权限

创建临时 gitlab 容器,保存修改配置文件
docker run -itd --name=gitlab \
--restart=always \
--privileged=true \
-p 8443:443 \
-p 80:80 \
-p 2222:22 # 把主机端口从22改成2222,容器内仍用22
-v /data/gitlab/etc:/etc/gitlab \
-v /data/gitlab/log:/var/log/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:10.7.5-ce.0
修改配置文件
sed -i "/external_url 'GENERATED_EXTERNAL_URL'/a external_url\t'http://192.168.10.60' " /data/gitlab/etc/gitlab.rb

查看gitlab.rb,确认gitlab_ssh_host已正确配置:
cat /data/gitlab/etc/gitlab.rb | grep gitlab_ssh_host
✅ 正确输出(会看到新添加的配置行):
# gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com'
gitlab_rails['gitlab_ssh_host'] = '192.168.10.60'
# 进入正在运行的GitLab容器
docker exec -it gitlab bash
# 在容器内执行重新配置(耐心等待,过程中会有大量输出,无error即正常)
gitlab-ctl reconfigure
# 配置完成后,重启GitLab服务确保所有组件生效
gitlab-ctl restart
# 退出容器
exit
sed -i "/gitlab_ssh_host/a gitlab_rails['gitlab_ssh_host'] = '192.168.10.60' " /data/gitlab/etc/gitlab.rb

关键说明
这个配置是GitLab SSH 远程登录的主机地址 ,结合之前将 SSH 端口映射为2222,后续通过 SSH 克隆仓库时,地址格式会是:
git clone ssh://git@192.168.10.60:2222/你的项目名.git
改密后登录网页

配置 SSH 密钥
ssh-keygen
一路回车

# 容器内执行,查看公钥内容并复制
cat ~/.ssh/id_rsa.pub

浏览器输入密钥

下载ruoyi项目


上传 若依项目 到 gitlab

克隆的 RuoYi-Vue 默认origin指向 Gitee,需要先删除旧的origin,再重新关联到你的 GitLab:
# 1. 删除已存在的origin远程仓库(指向Gitee)
git remote rm origin
# 2. 重新关联到你的GitLab仓库(先确保GitLab已创建ruoyi-server空白仓库)
git remote add origin http://192.168.10.60/root/ruoyi-server.git
# 3. 验证远程地址是否正确(输出应为你的GitLab地址)
git remote -v
✅ 正确输出:
origin http://192.168.10.60/root/ruoyi-server.git (fetch)
origin http://192.168.10.60/root/ruoyi-server.git (push)
Jenkins 部署与配置
拉取 jenkins 镜像
创建一个文件夹准备 jenkins 二次打包

准备 Maven 的settings.xml文件(解决 http 协议支持问题)
Maven 3.8.x 以上默认禁用 http 仓库,需要创建settings.xml覆盖默认配置,允许 http 访问:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>jdk-1.8</activeProfile>
</activeProfiles>
</settings>
新建 Dockerfile 准备制作镜像
bash
运行
cat > /data/jenkins/Dockerfile << 'EOF'
FROM jenkins/jenkins:2.480-jdk21
# 声明容器内Jenkins实际监听端口(程序内置8080,不可改)
EXPOSE 8080
# 切换root用户,解决权限+网络问题
USER root
# 替换为阿里云源(解决apt update卡住)
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main non-free contrib" > /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main non-free contrib" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main non-free contrib" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian-security bookworm-security main non-free contrib" >> /etc/apt/sources.list && \
# 仅安装必需工具,减少下载量
apt update && apt install -y --no-install-recommends tar curl && \
# 清理缓存,减小镜像体积
apt clean && rm -rf /var/lib/apt/lists/*
# 复制工具包(本地包自动解压,跳过JDK授权避免路径错误)
ADD apache-maven-3.9.9-bin.tar.gz /usr/local
ADD jdk-8u421-linux-x64.tar.gz /usr/local
ADD node-v11.0.0-linux-x64.tar.gz /usr/local
ADD settings.xml /usr/local/apache-maven-3.9.9/conf/
# 配置环境变量(仅Maven+Node,跳过JDK避免冲突)
ENV TZ=Asia/Shanghai
ENV M2_HOME=/usr/local/apache-maven-3.9.9
ENV NODE_HOME=/usr/local/node-v11.0.0-linux-x64
ENV PATH=$M2_HOME/bin:$NODE_HOME/bin:$PATH
# 仅授权Maven+Node(跳过JDK,避免路径错误)
RUN chown -R jenkins:jenkins $M2_HOME $NODE_HOME
# 切回jenkins用户(恢复官方默认,避免root启动)
USER jenkins
EOF
构建镜像
docker build -t jenkins:custom .

创建 Jenkins 数据目录(持久化配置)
# 创建目录(用于映射容器内的Jenkins配置目录)
mkdir -p /data/jenkins_home
# 授权给jenkins用户(容器内jenkins用户UID是1000,需匹配)
chown -R 1000:1000 /data/jenkins_home
授予 docker.sock 权限
chmod +777 /var/run/docker.sock
Jeskins 运行 与 安装

运行容器并到浏览器







测试



