Files
railwaysystem/.gitlab-ci.yml
T

104 lines
4.0 KiB
YAML

stages:
- build_backend
- build_frontend
- deploy
variables:
GIT_STRATEGY: clone
JAVA_HOME: "/data2/wzb/tools/jdk8"
M2_HOME: "/data2/wzb/tools/maven"
PATH: "/data2/wzb/tools/maven/bin:/data2/wzb/tools/jdk8/bin:/usr/local/bin:/usr/bin:/bin"
# 1. 编译打包后端
build_backend:
stage: build_backend
tags:
- railway-deploy
rules:
- if: '$CI_COMMIT_BRANCH'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- echo "=== 开始编译后端 RuoYi-Vue ==="
- export JAVA_HOME=/data2/wzb/tools/jdk8
- export PATH=/data2/wzb/tools/maven/bin:$JAVA_HOME/bin:$PATH
- javac -version
- bash scripts/bootstrap/check-kingbase-jdbc.sh
- cd RuoYi-Vue
- mvn clean package
- |
python3 -c 'import glob, re; runs = [int(m.group(1)) for f in glob.glob("ruoyi-*/target/surefire-reports/*.txt") for m in re.finditer(r"Tests run:\s*(\d+)", open(f, errors="ignore").read())]; print("=== 后端测试执行统计: Tests run: %d ===" % sum(runs))'
- echo "=== 后端测试与构建成功 ==="
artifacts:
expire_in: 2 days
paths:
- RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar
# 2. 编译打包前端
build_frontend:
stage: build_frontend
tags:
- railway-deploy
rules:
- if: '$CI_COMMIT_BRANCH'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- echo "=== 开始编译前端 build_ui ==="
- export NODE_OPTIONS="--openssl-legacy-provider --dns-result-order=ipv4first"
- cd build_ui
- if [ ! -d "node_modules" ] && [ -d "/data2/wzb/tools/frontend-cache/node_modules" ]; then
echo "使用服务器本地缓存的 node_modules";
ln -sfn /data2/wzb/tools/frontend-cache/node_modules ./node_modules;
fi
- npm run build:prod
- if [ ! -d "dist" ] || [ ! -f "dist/index.html" ]; then
echo "错误:前端构建产物 build_ui/dist/index.html 不存在,构建失败";
exit 1;
fi
- echo "=== 前端编译成功,build_ui/dist/index.html 校验通过 ==="
artifacts:
expire_in: 2 days
paths:
- build_ui/dist/
# 3. 部署到业务目录并平滑重启
deploy_production:
stage: deploy
tags:
- railway-deploy
rules:
- if: '$CI_COMMIT_BRANCH == "feat/cicd-pipeline"'
- when: never
script:
- echo "=== 0. 验证部署运行时环境配置 ==="
- if [ -z "${TRAIN_STUDENT_IDENTITY_ENCRYPTION_KEY:-}" ] || [ -z "${TRAIN_STUDENT_IDENTITY_HASH_KEY:-}" ] || [ -z "${SPRING_REDIS_PASSWORD:-}" ]; then
echo "错误:缺少必需的运行时配置";
exit 1;
fi
- echo "required runtime configuration present."
- echo "=== 1. 执行部署备份 (Rollback 兜底) ==="
- if [ -d "/data2/wzb/deploy/frontend" ] && [ "$(ls -A /data2/wzb/deploy/frontend 2>/dev/null)" ]; then
echo "备份现有前端资源到 /data2/wzb/deploy/frontend.bak ...";
mkdir -p /data2/wzb/deploy/frontend.bak;
cp -a /data2/wzb/deploy/frontend/. /data2/wzb/deploy/frontend.bak/;
fi
- if [ -f "/data2/wzb/deploy/backend/ruoyi-admin.jar" ]; then
echo "备份现有后端 Jar 到 /data2/wzb/deploy/backend/ruoyi-admin.jar.bak ...";
cp -p /data2/wzb/deploy/backend/ruoyi-admin.jar /data2/wzb/deploy/backend/ruoyi-admin.jar.bak;
fi
- echo "=== 2. 部署前端静态资源与文档中心 ==="
- mkdir -p /data2/wzb/deploy/frontend
- rm -rf /data2/wzb/deploy/frontend/*
- cp -r build_ui/dist/* /data2/wzb/deploy/frontend/
- mkdir -p /data2/wzb/deploy/frontend/docs
- cp -r docs/* /data2/wzb/deploy/frontend/docs/
- echo "=== 3. 部署后端 Jar 包 ==="
- mkdir -p /data2/wzb/deploy/backend
- cp RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /data2/wzb/deploy/backend/
- echo "=== 4. 执行平滑重启与生产自检 ==="
- chmod +x deploy/restart-all.sh
- bash deploy/restart-all.sh
- echo "=== 5. 输出访问地址 ==="
- echo "APPLICATION_URL=http://192.168.139.230:8082/"
- echo "DOCUMENTATION_URL=http://192.168.139.230:8082/docs/visual/index.html"
- echo "=== 部署与自检成功完成! ==="