首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Ruo-Yi 项目 CI/CD 完整实操方案
📅 2026/9/7 21:51:44
✍️ 爱科研究院
👁 阅读 3,247
一、主机角色规划与文档节省版一一对应表格机器 IP角色10.8.0.10K8S-master 节点Docker 部署 Gitlab Jenkins10.8.0.12K8S-worker01 节点部署 Rancher10.8.0.13Harbor 私有镜像仓库前置要求三台机器关闭防火墙 / SELinux、时间同步、网络互通、root 权限操作K8S 集群版本 1.20~1.33已提前搭建完成。二、全节点 Docker 环境配置三台机器全部执行1. 配置清华 Docker yum 源bashcat /etc/yum.repos.d/docker-ce.repo EOF [docker-ce-stable] nameDocker CE Stable - \$basearch baseurlhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/\$releasever/\$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg EOF2. 安装指定版本 Dockerbashyum install -y docker-ce-20.10.18 docker-ce-cli-20.10.183. 配置 daemon.json含 Harbor 私有仓库信任bashcat /etc/docker/daemon.json EOF { registry-mirrors: [ https://0f8a3388042b4b0ab6611ccc6e866ab3.mirror.swr.myhuaweicloud.com ], insecure-registries: [10.8.0.13], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 500m, max-file: 3 } } EOF4. 重启 Docker 生效bashsystemctl daemon-reload systemctl restart docker systemctl enable docker三、10.8.0.10 节点部署 GitlabDocker 部署1. 拉取 Gitlab 镜像bashdocker pull beginor/gitlab-ce2. 创建挂载目录并授权bashmkdir -p /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data chmod 777 /data/gitlab/etc/ /data/gitlab/log/ /data/gitlab/data/3. 启动临时 Gitlab 容器生成配置文件bashdocker run -itd --namegitlab \ --restartalways \ --privilegedtrue \ -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-ce4. 停止容器修改配置文件bashdocker stop gitlab修改 external_urlbashsed -i /external_url GENERATED_EXTERNAL_URL/a external_url\thttp://10.8.0.10 /data/gitlab/etc/gitlab.rb修改 SSH 主机地址bashsed -i /gitlab_ssh_host/a gitlab_rails[gitlab_ssh_host] 10.8.0.10 /data/gitlab/etc/gitlab.rb修改 SSH 端口bashsed -i /gitlab_shell_ssh_port/a gitlab_rails[gitlab_shell_ssh_port] 222 /data/gitlab/etc/gitlab.rb验证配置bashcat /data/gitlab/etc/gitlab.rb | grep -E external_url|gitlab_ssh_host|gitlab_shell_ssh_port5. 启动 Gitlab 并等待就绪bashdocker start gitlab docker ps | grep gitlab等待容器状态从starting变为healthy浏览器访问http://10.8.0.10设置 root 账户密码并登录。6. 配置 Gitlab SSH 密钥bash# 进入容器生成密钥 docker exec -it gitlab /bin/sh ssh-keygen # 全程回车不设置密码 cat ~/.ssh/id_rsa.pub复制公钥内容在 Gitlab 页面右上角头像 → 设置 → SSH 密钥 → 粘贴公钥 → 增加密钥。四、10.8.0.13 节点部署 Harbor 私有仓库1. 安装 Docker-Composebashcurl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose docker-compose -v2. 下载并解压 Harbor 安装包bashwget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/3. 修改 harbor.cfg 配置bashvim /usr/local/harbor/harbor.cfg修改两处核心参数plaintexthostname 10.8.0.13 harbor_admin_password Harbor123454. 启动 Harborbashcd /usr/local/harbor/ ./prepare ./install.sh5. 创建项目仓库浏览器访问http://10.8.0.13账号admin密码Harbor12345新建公开项目ruoyi-vue。6. 测试仓库登录任意节点执行bashdocker login -u admin -p Harbor12345 http://10.8.0.13五、10.8.0.10 节点部署 Jenkins二次打包镜像1. 拉取基础 Jenkins 镜像bashdocker pull jenkins/jenkins:2.5072. 准备工作目录与资源包bashmkdir -p /data/jenkins cd /data/jenkins将文档配套的CICD.zip上传至此目录并解压得到apache-maven-3.9.9-bin.tar.gzjdk-8u431-linux-x64.tar.gznode-v18.19.0-linux-x64.tar.gz3. 创建 maven 配置文件 settings.xmlbashcat settings.xml EOF ?xml version1.0 encodingUTF-8? settings xmlnshttp://maven.apache.org/SETTINGS/1.2.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd /settings EOF4. 创建 Dockerfile二次打包bashcat Dockerfile EOF FROM jenkins/jenkins:2.507 EXPOSE 8080 ADD apache-maven-3.9.9-bin.tar.gz /usr/local ADD jdk-8u431-linux-x64.tar.gz /usr/local ADD node-v18.19.0-linux-x64.tar.gz /usr/local ADD settings.xml /usr/local/apache-maven-3.9.9/conf/ ENV TZAsia/Shanghai ENV M2_HOME/usr/local/apache-maven-3.9.9 ENV NODE_HOME/usr/local/node-v18.19.0-linux-x64 ENV PATH\$M2_HOME/bin:\$NODE_HOME/bin:\$PATH EOF5. 创建 jenkins_home 目录并授权bashmkdir jenkins_home chmod 777 jenkins_home6. 构建自定义 Jenkins 镜像bashdocker build -t jenkins . docker images | grep jenkins7. 授权 docker.sock 并启动 Jenkinsbashchmod 777 /var/run/docker.sock 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 \ jenkins8. 初始化 Jenkins获取初始管理员密码bashdocker logs jenkins # 或容器内查看cat /var/jenkins_home/secrets/initialAdminPassword浏览器访问http://10.8.0.10:8080粘贴密码解锁。选择安装推荐插件失败的插件重新安装。选择【使用 admin 账户继续】Jenkins URL 填http://10.8.0.10:8080/保存完成。进入页面后右上角修改 admin 密码重新登录。9. 配置 JDK 工具Manage Jenkins→Tools→ 新增 JDK名称jdk8JAVA_HOME/usr/local/jdk1.8.0_431保存后重启 Jenkinsbashdocker restart jenkins10. 测试基础流水线新建任务test类型【流水线】勾选 “使用 Groovy 沙盒”填入脚本groovypipeline { agent any tools { jdk jdk8 } stages { stage(test) { steps { script { sh docker -v java -version mvn -v node -v npm -v } } } } }保存后点击立即构建控制台输出所有工具版本号即为成功。六、Jenkins 对接基础环境配置1. Jenkins 容器配置 SSH 免密登录 10.8.0.10bashdocker exec -it jenkins bash ssh-keygen -t rsa # 全程回车 ssh-copy-id root10.8.0.10 # 输入10.8.0.10的root密码完成免密2. K8S 创建 Harbor 镜像拉取 Secretbashkubectl -n default create secret docker-registry harbor-registry \ --docker-emailbaidu.comexample \ --docker-usernameadmin \ --docker-passwordHarbor12345 \ --docker-server10.8.0.13 kubectl get secret3. 启动 MySQL、Redis 容器10.8.0.10bashdocker run -d \ --name mysql \ -p 0.0.0.0:3306:3306 \ -e MYSQL_ROOT_PASSWORD123456 \ --restartalways \ mysql:8.0.39 docker run -d \ --name redis \ -p 0.0.0.0:6379:6379 \ --restartalways \ redis:7.4.14. Jenkins 安装 Gitlab 插件Jenkins 页面系统管理 → 插件管理 → 可选插件 → 搜索GitLab→ 勾选安装 → 安装完成后重启 Jenkins。七、RuoYi-Vue 后端项目 CI/CD 部署1. 克隆代码并拆分前后端bashyum install -y git cd /data/jenkins git clone https://gitee.com/y_project/RuoYi-Vue.git mv RuoYi-Vue/ruoyi-ui/ ./2. 导入数据库脚本bashcd /data/jenkins/RuoYi-Vue docker cp sql/quartz.sql mysql:/opt docker cp sql/ry_20250522.sql mysql:/opt # 进入MySQL容器创建库并导入 docker exec -it mysql bash mysql -uroot -p123456MySQL 内执行sqlcreate database ry-vue; use ry-vue; source /opt/quartz.sql; source /opt/ry_20250522.sql; show tables;3. 修改后端配置文件bashcd /data/jenkins/RuoYi-Vue/ruoyi-admin/src/main/resources/修改 application-druid.yml数据库连接yamlurl: jdbc:mysql://10.8.0.10:3306/ry-vue?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8 username: root password: 123456修改 application.ymlRedis 连接yamlredis: host: 10.8.0.10 port: 6379 database: 0 password:4. 新增三个部署文件RuoYi-Vue 根目录下① Dockerfilebashcd /data/jenkins/RuoYi-Vue cat Dockerfile EOF FROM openjdk:8u342 ENV TZAsia/Shanghai ADD ruoyi-admin/target/ruoyi-admin.jar app.jar ENTRYPOINT [java, -jar, app.jar] EOF② Jenkinsfilebashcat Jenkinsfile EOF pipeline { agent any tools { jdk jdk8 } environment { APP_NAME ruoyi-server APP_PORT 9800 DOCKER_USER admin DOCKER_PASS Harbor12345 } stages { stage(build) { steps { script { sh mvn clean package -DskipTeststrue } } } stage(deploy) { steps { script { sh docker rmi \$APP_NAME || true docker rmi 10.8.0.13/ruoyi-vue/\$APP_NAME || true docker build -t \$APP_NAME . docker tag \$APP_NAME 10.8.0.13/ruoyi-vue/\$APP_NAME docker logout 10.8.0.13 || true ssh -tt root10.8.0.10 docker login -u \$DOCKER_USER -p \$DOCKER_PASS 10.8.0.13;docker push 10.8.0.13/ruoyi-vue/\$APP_NAME scp /var/jenkins_home/workspace/ruoyi-server/ruoyi-vue.yaml root10.8.0.10:/ ssh -tt root10.8.0.10 /usr/bin/kubectl delete -f /ruoyi-vue.yaml || true ssh -tt root10.8.0.10 /usr/bin/kubectl apply -f /ruoyi-vue.yaml } } } } EOF③ ruoyi-vue.yamlbashcat ruoyi-vue.yaml EOF apiVersion: apps/v1 kind: Deployment metadata: name: ruoyi-vue labels: app: ruoyi-vue spec: replicas: 1 selector: matchLabels: app: ruoyi-vue template: metadata: labels: app: ruoyi-vue spec: imagePullSecrets: - name: harbor-registry containers: - name: ruoyi-vue image: 10.8.0.13/ruoyi-vue/ruoyi-server:latest ports: - containerPort: 8080 imagePullPolicy: IfNotPresent --- apiVersion: v1 kind: Service metadata: name: ruoyi-vue labels: app: ruoyi-vue spec: ports: - name: http port: 8080 nodePort: 30001 type: NodePort selector: app: ruoyi-vue EOF5. Gitlab 仓库配置新建群组管理区域 → 新建群组 → 名称 / 路径 / 描述都填ruo-yi→ 公开 → 创建。新建用户管理区域 → 新建用户 → 姓名 / 用户名zhangsan邮箱zhangsangitlab.com→ 创建创建后编辑设置密码abc1234。新建项目管理区域 → 新建项目 → 群组选ruo-yi项目名ruoyi-vue→ 公开 → 创建。添加成员项目设置 → 成员 → 添加zhangsan角色【主程序员】群组内也添加zhangsan为主程序员。6. 上传代码到 Gitlabbashcd /data/jenkins/RuoYi-Vue # 生成主机SSH密钥并配置到Gitlab ssh-keygen # 全程回车 cat ~/.ssh/id_rsa.pub # 复制公钥到Gitlab的SSH密钥中 # 配置git全局信息 git config --global user.email zhangsangitlab.com git config --global user.name zhangsan # 关联远程仓库 git remote rename origin old-origin git remote add origin ssh://git10.8.0.10:222/ruo-yi/ruoyi-vue.git # 提交并推送代码 git add --all git commit -m add RuoYi-Vue git push -u origin master7. Jenkins 配置流水线并关联 GitlabJenkins 容器配置 Gitlab SSH 密钥bashdocker exec -it jenkins bash ssh-keygen # 全程回车 cat ~/.ssh/id_rsa.pub # 复制公钥添加到Gitlab的SSH密钥中 # 测试SSH连接 ssh-keyscan -p 222 10.8.0.10 ~/.ssh/known_hosts新建 Jenkins 任务任务名ruoyi-server类型【流水线】流水线选择Pipeline script from SCMSCM 选GitRepository URL 填ssh://git10.8.0.10:222/ruo-yi/ruoyi-vue.git凭证添加 SSH 密钥凭证指向 Jenkins 容器的私钥脚本路径Jenkinsfile配置 Webhook 触发触发器勾选GitLab triggers→ 生成 Secret tokenGitlab 项目 → 设置 → Webhooks → URL 填http://10.8.0.10:8080/project/ruoyi-server粘贴 Secret token勾选 Push 事件 → 增加钩子若报 Invalid urlGitlab 管理员设置 → Network → 勾选Allow requests to the local network from webhooks and integrations8. 构建验证点击【立即构建】等待流水线执行完成在 K8S-master 节点验证bashkubectl get pod # 看到 ruoyi-vue-xxx 1/1 Running 即为成功访问http://10.8.0.10:30001可访问若依后端接口。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/7 21:51:44
柚子苗木不能只看品种名:来源、标签与适栽条件要核
2026/9/7 21:46:44
Directus:无头CMS与数据库管理的高效解决方案
2026/9/7 21:46:44
基于SpringBoot的家政服务平台源码+文档+讲解视频
2026/9/7 22:26:48
智能变电站巡检机器人:核心技术解析与应用实践
2026/9/7 22:26:48
天心区学Python选自学还是报班?本地开发学长讲清实情
2026/9/7 22:26:48
XGBoost实战:从Kaggle baseline到前排的完整指南
2026/9/7 22:26:48
北京怀柔Java全栈开发培训 Web前端 软件测试就业培训班
2026/9/7 22:26:48
2026年厨房净水器推荐:小户型、多人口、冰热全能三款方案对比
2026/9/7 22:21:47
商用翻译机全生命周期成本核算与降本策略
2026/9/7 0:03:59
基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现
2026/9/7 0:03:59
UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南
2026/9/7 0:03:59
BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析
2026/9/7 0:22:31
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/7 0:44:48
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/7 1:55:33
基于CNN的调制信号识别:MATLAB实现时频图分类实战