CICD持续集成Ruo-Yi项目

目录

[一、先搞懂 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 的运行环境配置好:

  1. 部署 Jenkins:安装在服务器 / 虚拟机(也可直接用 Docker 运行,更便捷);
  2. 配置依赖工具:根据项目需求安装 JDK、Maven/Gradle、Git、Docker、Node.js 等(在 Jenkins 的 "全局工具配置" 里设置);
  3. 配置凭证:保存代码仓库(Git/GitLab)、服务器登录、镜像仓库的账号 / 密钥(避免明文暴露)。
步骤 2:创建并配置流水线(核心)

这一步是定义 "自动化要做什么",推荐用 Pipeline(流水线)方式:

  1. 新建任务:在 Jenkins 页面点击 "新建任务",选择 "流水线(Pipeline)" 类型;
  2. 定义流程逻辑:
    • 方式 1(推荐):选择 "从 SCM 获取 Jenkinsfile",指定代码仓库地址和 Jenkinsfile 的路径(把流程脚本和代码一起管理);
    • 方式 2:直接在 Jenkins 页面写 "Pipeline Script"(适合简单测试,不推荐生产用)。
步骤 3:设置触发器(决定 "什么时候执行")

配置流程的触发条件,常见类型:

  • 手动触发:点击 "立即构建",适合调试或紧急发布;
  • 自动触发:
    • 代码提交触发:配置 Git 仓库的 WebHook,代码 push/merge 后自动执行;
    • 定时触发:用 Cron 表达式(比如每天凌晨 2 点执行,0 2 * * *);
    • 上游任务触发:其他 Jenkins 任务执行完成后触发当前流程。
步骤 4:执行自动化流程(核心执行环节)
  1. 拉取代码(SCM Checkout):从 Git/GitLab 等仓库拉取最新代码到 Jenkins 节点;
  2. 代码构建:编译代码、打包制品(比如 Java 项目打 jar 包、前端项目打 dist 包、构建 Docker 镜像);
  3. 自动化测试:运行单元测试、集成测试(比如 JUnit、pytest),测试不通过则直接终止流程;
  4. 制品归档:把构建好的包 / 镜像保存到仓库(比如 Maven 仓库 Nexus、Docker 镜像仓库);
  5. 部署发布:把测试通过的制品部署到目标环境(开发 / 测试 / 生产,比如部署到 Docker 容器、虚拟机);
  6. 结果通知:流程结束后推送结果(邮件、钉钉 / 企业微信、Slack),失败则提示具体原因。
步骤 5:流程监控与复盘
  1. 查看构建日志:Jenkins 页面会记录每一步的执行日志,失败时重点看日志定位问题;
  2. 重试 / 回滚:失败则修复代码 / 配置后重试,部署出错可回滚到上一版本;
  3. 优化流程:比如并行执行测试、缩短构建时间、增加更多校验环节。

三,项目实战

环境部署

主机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 运行 与 安装

运行容器并到浏览器


测试

相关推荐
虫小宝12 小时前
导购APP容器化CI/CD流程:Jenkins在返利系统持续部署中的实践
运维·ci/cd·jenkins
黛玉晴雯子00113 小时前
Devops基础之Jenkins持续集成工具(持续更新)
ci/cd·jenkins·devops
信创天地14 小时前
信创环境下CI/CD与灾备体系构建:从异构挑战到自主可控的运维革命
运维·ci/cd
熊猫钓鱼>_>15 小时前
对话式部署实践:从零开始使用TRAE SOLO构建自动化CI/CD Pipeline
运维·ci/cd·自动化·devops·trae·solo·trae solo
tzhou644521 天前
Docker的CICD持续集成
ci/cd·docker·容器
少云清1 天前
【接口测试】2_持续集成 _Git与Gitee
git·ci/cd·gitee
开开心心就好1 天前
右键菜单管理工具,添加程序自定义名称位置
linux·运维·服务器·ci/cd·docker·pdf·1024程序员节
应用市场2 天前
电脑通过HDMI反向控制外接显示器亮度和声音——DDC/CI与CEC协议全解析
ci/cd·电脑
少云清2 天前
【接口测试】3_持续集成 _Jenkins
运维·ci/cd·jenkins