当前位置: 首页 > news >正文

gitlab+portainer 实现Ruoyi Vue前端CI/CD

1. 场景

最近整了一个Ruoyi Vue 项目,需要实现CICD,经过一番坎坷,最终达成,现将技术要点和踩坑呈现。
具体操作流程和后端大同小异,后端操作参考连接如下:
https://blog.csdn.net/leinminna/article/details/147968082
前端项目结构及需要的文件:
在这里插入图片描述

2. 项目

项目中需要配置两个文件:.gitlab-ci.yml,Dockerfile,都放在项目的根目录下,
注意: REGISTRY_URL: “harbor.xxxx.com/ics” 指向具体的仓库中的地址.

2.1 .gitlab-ci.yml

内容如下

stages:- install- build- packagevariables:# 镜像名称和标签IMAGE_NAME: "ics-web"IMAGE_TAG: "$CI_COMMIT_SHORT_SHA" # 使用 Git 提交哈希作为标签REGISTRY_URL: "harbor.zhcoal.com/ics" # 私有仓库地址NODE_VERSION: "16.20.2" # 指定Node.js版本# 缓存 node_modules 加速构建
cache:key: ${CI_COMMIT_REF_SLUG}paths:- node_modules/- dist/# 阶段1:安装依赖
install_deps:stage: installimage: node:$NODE_VERSIONscript:- npm install --registry=https://registry.npmmirror.com --legacy-peer-deps # 使用国内镜像加速only:- dev- master- tagsartifacts:paths:- node_modules/# 阶段2:构建生产环境代码
build_prod:stage: buildimage: node:$NODE_VERSIONscript:- npm run build # 使用更新后的构建命令artifacts:paths:- dist/ # 传递dist目录到后续阶段only:- dev- master- tags# 阶段3:构建和推送Docker镜像
docker_build:stage: packageimage: docker:20.10services:- docker:20.10-dindvariables:DOCKER_BUILDKIT: 1before_script:- echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin "$REGISTRY_URL"script:- mkdir docker-build-context- cp -r dist docker-build-context/- cp Dockerfile docker-build-context/- cp ics.crt docker-build-context/- cp ics.key docker-build-context/- cp default.conf docker-build-context/- cd docker-build-context- echo "构建上下文内容:"- ls -la- docker build -t "$REGISTRY_URL/$IMAGE_NAME:$IMAGE_TAG" .- docker push "$REGISTRY_URL/$IMAGE_NAME:$IMAGE_TAG"- if [[ "$CI_COMMIT_BRANCH" == "master" ]]; thendocker tag "$REGISTRY_URL/$IMAGE_NAME:$IMAGE_TAG" "$REGISTRY_URL/$IMAGE_NAME:latest";docker push "$REGISTRY_URL/$IMAGE_NAME:latest";firules:- if: $CI_COMMIT_BRANCH == "dev" || $CI_COMMIT_BRANCH == "master" || $CI_COMMIT_TAG
2.2 Dockerfile 内容

内容如下

FROM nginx
EXPOSE 80 443COPY ics.crt /etc/nginx/ssl/ics.crt
COPY ics.key /etc/nginx/ssl/ics.key
COPY dist /usr/share/nginx/html
COPY default.conf /etc/nginx/conf.d/default.conf

3. 其他同后台配置一样

参考:
https://blog.csdn.net/leinminna/article/details/147968082

http://www.xdnf.cn/news/458983.html

相关文章:

  • 内网互通原则详解!
  • Apache HttpClient 5 用法-Java调用http服务
  • 文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
  • duxapp 2025-01-13 更新 支持小程序配置文件
  • VisionPro斑点寻找工具Blob
  • 十、HQL:排序、联合与 CTE 高级查询
  • 2.4GHz无线芯片核心技术解析与典型应用
  • 基于策略的强化学习方法之近端策略优化(PPO)深度解析
  • 数据结构 -- 树形查找(一)二叉排序树
  • 前端上传获取excel文件后,如何读取excel文件的内容
  • 实用工具:微软软件PowerToys(完全免费),实现多台电脑共享鼠标和键盘(支持window系统)
  • 基于微信小程序的在线聊天功能实现:WebSocket通信实战
  • 代码随想录算法训练营第60期第三十七天打卡
  • Yeoman实战指南:从零打造自定义项目生成器
  • pyenv简单的Python版本管理器(macOS版)
  • P8803 [蓝桥杯 2022 国 B] 费用报销
  • V837s-LAN8720A网口phy芯片调试
  • git管理忽略指定路径/临时文件
  • GitHub 趋势日报 (2025年05月14日)
  • 时序数据库IoTDB分布式架构解析与运维指南
  • Kafka消息路由分区机制深度解析:架构设计与实现原理
  • Remote Desktop安卓远程无法使用中文输入法
  • Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
  • HttpServletRequest常用功能简介-笔记
  • Go 中闭包的常见使用场景
  • 【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable
  • 【人工智能-agent】--Dify+Mysql+Echarts搭建了一个能“听懂”人话的数据可视化助手!
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷八及详细答案解析
  • 数据科学和机器学习的“看家兵器”——pandas模块 之四
  • 红黑树:数据世界的平衡守护者