Docker与Jenkins实现RuoYi-Vue前后端分离项目的CICD全流程自动化

 更新时间:2026年01月02日 09:16:59   作者:2501_93990905  
在现代软件开发流程中,持续集成/持续部署(CICD)已经成为提升开发效率、保障代码质量的关键实践,本文将详细介绍如何利用Docker容器化技术结合Jenkins,搭建一套完整的CICD流程,实现RuoYi-Vue前后端分离项目的自动化构建、测试和部署,从代码提交到自动部署的全流程自动化

在现代软件开发流程中,持续集成/持续部署(CICD)已经成为提升开发效率、保障代码质量的关键实践。本文将详细介绍如何利用Docker容器化技术结合Jenkins,搭建一套完整的CICD流程,实现RuoYi-Vue前后端分离项目的自动化构建、测试和部署,从代码提交到自动部署的全流程自动化。

一、环境准备与架构设计

1. 主机环境规划

本次部署采用两台服务器(虚拟机)搭建CICD环境,具体配置如下:

主机IP部署服务清单配置要求
192.168.10.13Jenkins、Redis、MySQL、Spring Boot服务、Nginx至少2核8G内存
192.168.10.80Docker、GitLab1核4G内存

2. 核心技术栈

  • 版本控制:GitLab - 用于代码仓库管理
  • 持续集成:Jenkins - 实现自动化构建与部署
  • 容器化:Docker - 统一应用运行环境
  • 数据库:MySQL 8.0 - 存储应用数据
  • 缓存:Redis 7.4 - 提升应用性能
  • Web服务器:Nginx - 部署前端应用并反向代理

3. Docker环境安装

所有服务器需先安装Docker环境,步骤如下:

# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装指定版本Docker并设置开机自启
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io   
systemctl start docker.service
systemctl enable docker.service

# 配置华为镜像加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
systemctl daemon-reload
systemctl restart docker

二、GitLab部署与代码管理

1. GitLab容器部署

# 拉取GitLab镜像
docker pull beginor/gitlab-ce

# 创建数据卷目录并授权
mkdir -p /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data
chmod 777 /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data/

# 启动GitLab容器
docker run -itd --name=gitlab \
--restart=always \
--privileged=true \
-p 8443:443 \
-p 80:80 \
-p 222:22 \
-v /data/gitlab/etc:/etc/gitlab \
-v /data/gitlab/log:/var/log/gitlab \
-v /data/gitlab/data:/var/opt/gitlab \
beginor/gitlab-ce

2. GitLab配置修改

# 修改修改外部访问地址
sed -i "/external_url 'GENERATED_EXTERNAL_URL'/a external_url\t'http://192.168.10.80' " /data/gitlab/etc/gitlab.rb

# 修改SSH主机地址
sed -i "/gitlab_ssh_host/a gitlab_rails['gitlab_ssh_host']= '192.168.10.80' " /data/gitlab/etc/gitlab.rb

# 修改SSH端口
sed -i "/gitlab_shell_ssh_port/a gitlab_rails['gitlab_shell_ssh_port'] = 222" /data/gitlab/etc/gitlab.rb

# 重启GitLab
docker restart gitlab

3. 代码上传至GitLab

  1. 从Gitee克隆RuoYi-Vue项目:git clone https://gitee.com/y_project/RuoYi-Vue.git
  2. 在GitLab创建创建两个项目:ruoyi-server(后端)和ruoyi-ui(前端)
  3. 将代码分别推送至对应仓库:
# 初始化本地仓库
git init

# 关联远程仓库
git remote add origin http://192.168.10.80/root/ruoyi-server.git

# 提交并推送代码
git add .
git commit -m "Initial commit"
git push -u origin master

三、Jenkins部署与配置

1. 定制Jenkins镜像

为满足RuoYi项目构建需求,我们需要定制包含JDK、Maven和Node.js的Jenkins镜像:

FROM jenkins/jenkins:2.480-jdk21
EXPOSE 8080
 
# 添加依赖工具
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
 
# 覆盖maven配置
ADD settings.xml /usr/local/apache-maven-3.9.9/conf/
 
# 配置环境变量
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

构建镜像:docker build -t jenkins .

2. 启动Jenkins容器

# 创建数据目录
mkdir -p /data/jenkins/jenkins_home
chmod +777 /data/jenkins/jenkins_home

# 启动容器
docker run -d --name jenkins \
-p 0.0.0.0:8080:8080 \
-v /data/jenkins/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins

3. 初始化Jenkins

  1. 获取初始密码:docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
  2. 访问http://192.168.10.13:8080,输入密码并安装推荐插件
  3. 配置JDK环境:进入"全局工具配置",设置JDK安装目录

四、基础服务部署

1. MySQL部署

docker run -d \
--name mysql \
-p 0.0.0.0:3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:8.0.39

# 导入初始化数据
docker exec -it mysql bash
mysql -uroot -p123456
create database ry-vue;
use ry-vue;
source /opt/ry_20250522.sql;
source /opt/quartz.sql;

2. Redis部署

docker run -d \
--name redis \
-p 0.0.0.0:6379:6379 \
--restart=always \
redis:7.4.1

五、CICD流水线配置

1. 后端服务流水线

① 项目配置修改

修改ruoyi-admin/src/main/resources/application-druid.yml中的数据库连接信息和Redis配置,确保指向正确的服务地址。

② 创建Dockerfile

FROM openjdk:8u342
ENV TZ=Asia/Shanghai
ADD ruoyi-admin/target/ruoyi-admin.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

③ 创建Jenkinsfile

pipeline {
    agent any
    tools {
        jdk 'jdk8'
    }
    environment {
        APP_NAME = 'ruoyi-server'
        APP_PORT = 9800
    }
    stages {
        stage('build') {
            steps {
                script {
                    sh 'mvn clean package -DskipTests=true'
                }
            }
        }
        stage('deploy') {
            steps {
                script {
                    sh """
                        docker stop $APP_NAME || true
                        docker rm $APP_NAME || true
                        docker rmi $APP_NAME || true
                        docker build -t $APP_NAME .
                        docker run -d --name $APP_NAME \
                        -p 0.0.0.0:$APP_PORT:$APP_PORT \
                        --restart=always \
                        $APP_NAME \
                        --server.port=$APP_PORT
                    """
                }
            }
        }
    }
}

2. 前端服务流水线

① 创建Nginx配置文件

server {
    listen 9801;
    charset utf-8;
    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }
    location /prod-api {
        rewrite ^/prod-api/(.*)$ /$1 break;
        proxy_pass http://192.168.10.13:9800;
    }
}

② 创建Dockerfile

FROM nginx:1.26.2
ENV LC_ALL=C.UTF-8
RUN rm -rf /etc/nginx/conf.d/default.conf
ADD nginx.conf /etc/nginx/conf.d
COPY dist/ /usr/share/nginx/html/

③ 创建Jenkinsfile

pipeline {
    agent any
    environment {
        APP_NAME = 'ruiyi-ui'
        APP_PORT = 9801
    }
    stages {
        stage('build') {
            steps {
                script {
                    sh """
                        npm install
                        npm run build:prod
                    """
                }
            }
        }
        stage('deploy') {
            steps {
                script {
                    sh """
                        docker stop $APP_NAME || true
                        docker rm $APP_NAME || true
                        docker rmi $APP_NAME || true
                        docker build -t $APP_NAME .
                        docker run -d --name $APP_NAME \
                        -p 0.0.0.0:$APP_PORT:$APP_PORT \
                        --restart=always \
                        $APP_NAME
                    """
                }
            }
        }
    }
}

3. 配置自动触发

  1. 在Jenkins项目中启用"Build when a change is pushed to GitLab"
  2. 生成Secret token并在GitLab项目的Webhooks中配置
  3. 配置触发URL:http://192.168.10.13:8080/project/项目名称

六、验证部署结果

完成上述配置后,每次向GitLab推送代码时,Jenkins将自动触发构建流程:

  1. 后端服务构建完成后,可访问http://192.168.10.13:9800验证API是否可用
  2. 前端服务构建完成后,通过http://192.168.10.13:9801访问前端页面
  3. 使用默认账号密码(admin/123456)登录系统,验证整体功能

总结
通过这套CICD流程,我们实现了RuoYi-Vue项目从代码提交到自动部署的全流程自动化,极大地提高了开发效率和部署一致性,为团队协作和持续交付奠定了坚实基础。

到此这篇关于Docker与Jenkins实现RuoYi-Vue前后端分离项目的CICD全流程自动化的文章就介绍到这了,更多相关RuoYi-Vue代码提交到自动部署的CICD内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker容器添加对外映射端口的实现

    docker容器添加对外映射端口的实现

    本文主要介绍了docker容器添加对外映射端口的实现 ,从而实现容器与外部网络的通信,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • docker之创建MariaDB镜像的方法

    docker之创建MariaDB镜像的方法

    这篇文章主要介绍了docker之创建MariaDB镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • docker实现将本地文件复制到docker容器内

    docker实现将本地文件复制到docker容器内

    这篇文章主要介绍了docker实现将本地文件复制到docker容器内方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Docker 容器通信与数据持久化问题及注意事项

    Docker 容器通信与数据持久化问题及注意事项

    本文将深入探讨Docker高级管理中的容器通信技术与数据持久化方案,帮助读者构建高效、可靠的容器化应用架构,对docker 数据持久化相关知识感兴趣的朋友一起看看吧
    2025-06-06
  • dockerfile中CMD和ENTRYPOINT指令使用及说明

    dockerfile中CMD和ENTRYPOINT指令使用及说明

    介绍了Dockerfile中的CMD和ENTRYPOINT指令以及它们的执行方式,包括exec形式和shell形式,CMD提供默认命令,支持覆盖;ENTRYPOINT定义固定命令,不支持覆盖,但可以通过--entrypoint参数实现覆盖
    2025-11-11
  • 使用Docker Compose部署Dify的方法

    使用Docker Compose部署Dify的方法

    这篇文章主要介绍了使用Docker Compose部署Dify的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-05-05
  • Docker 运行时的用户与组管理的方法

    Docker 运行时的用户与组管理的方法

    这篇文章主要介绍了Docker 运行时的用户与组管理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 创建的docker容器时间显示错误/date错误/时区错误

    创建的docker容器时间显示错误/date错误/时区错误

    这篇文章主要介绍了创建的docker容器时间显示错误/date错误/时区错误的处理方法,一起看看吧
    2017-06-06
  • docker network 自定义网络配置与管理指南详细过程

    docker network 自定义网络配置与管理指南详细过程

    Docker网络是容器间通信和与外部世界交互的基础,通过自定义网络,可以实现容器间的隔离、静态 IP 分配和服务发现,这篇文章主要介绍了docker network 自定义网络配置与管理指南,需要的朋友可以参考下
    2025-05-05
  • Windows环境GeoServer打包Docker的方法实现

    Windows环境GeoServer打包Docker的方法实现

    本文介绍了在Windows环境下将GeoServer打包为Docker镜像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12

最新评论