Commit 2dc8968a authored by Cai Wei's avatar Cai Wei

fix(ci): 修复ci语法错误

parent d811f16b
Pipeline #1307 canceled with stages
# GitLab CI配置文件 - DC-TOM项目Cypress测试集成
# 项目: dctomproject
# 分支: projects
# GitLab版本: 12.0.3 兼容配置
stages:
- build
- install
- lint
- test
- reports
variables:
NODE_VERSION: "18"
CYPRESS_CACHE_FOLDER: "$CI_PROJECT_DIR/cache/Cypress"
npm_config_cache: "$CI_PROJECT_DIR/cache/npm"
VITE_PORT: "3000"
CYPRESS_baseUrl: "http://localhost:3000"
# 缓存配置 - 提高构建效率
cache:
key: "${CI_COMMIT_REF_SLUG}"
paths:
- cache/Cypress/
- cache/npm/
- node_modules/
- build
- deploy
# 构建阶段
build:
stage: build
image: node:18-alpine
before_script:
- echo "开始构建dc-tom项目..."
- node --version
- npm --version
# 1. 安装依赖
install:
stage: install
image: node:14
script:
- npm ci --cache $npm_config_cache --prefer-offline
- npm run build
- echo "构建完成,生成dist目录"
- npm install
artifacts:
paths:
- dist/
- node_modules/
expire_in: 2 hours
only:
- web
- projects
- merge_requests
- node_modules/ # 保持依赖缓存供后续阶段使用
expire_in: 1h
# 基础测试 - 核心功能验证
cypress-basic-tests:
stage: test
image: cypress/browsers:node16.14.2-slim-chrome103-ff102
# 2. 代码检查
lint:
stage: lint
image: node:14
dependencies:
- build
before_script:
- echo "准备运行Cypress基础测试..."
- npm ci --cache $npm_config_cache --prefer-offline
# 启动应用服务器
- npm run preview -- --host 0.0.0.0 --port $VITE_PORT &
- echo "等待应用服务器启动..."
- sleep 15
# 健康检查
- curl --retry 15 --retry-connrefused --retry-delay 3 http://localhost:$VITE_PORT || (echo "应用启动失败" && exit 1)
- echo "应用服务器启动成功"
- install
script:
- echo "开始运行基础测试用例..."
# 运行核心功能测试:登录、仪表盘、导航
- npx cypress run
--browser chrome
--headless
--spec "cypress/e2e/{login,dashboard,navigation}.cy.js"
--config video=true,screenshotOnRunFailure=true
--reporter mochawesome
--reporter-options "reportDir=cypress/reports/basic,overwrite=false,html=true,json=true,timestamp=mmddyyyy_HHMMss"
after_script:
- echo "基础测试完成"
- ls -la cypress/reports/basic/ || echo "报告目录为空"
- ls -la cypress/videos/ || echo "视频目录为空"
- ls -la cypress/screenshots/ || echo "截图目录为空"
artifacts:
when: always
paths:
- cypress/screenshots/
- cypress/videos/
- cypress/reports/basic/
reports:
junit: cypress/reports/basic/*.xml
expire_in: 1 week
only:
- web
- projects
- merge_requests
- npm run lint
# 完整测试套件 - 手动触发
cypress-full-tests:
# 3. 单元测试
unit_test:
stage: test
image: cypress/browsers:node16.14.2-slim-chrome103-ff102
image: node:14
dependencies:
- build
before_script:
- echo "准备运行Cypress完整测试套件..."
- npm ci --cache $npm_config_cache --prefer-offline
- npm run preview -- --host 0.0.0.0 --port $VITE_PORT &
- sleep 15
- curl --retry 15 --retry-connrefused --retry-delay 3 http://localhost:$VITE_PORT
- echo "应用服务器准备就绪"
- install
script:
- echo "开始运行完整测试套件..."
# 运行所有测试用例
- npx cypress run
--browser chrome
--headless
--spec "cypress/e2e/*.cy.js"
--config video=true,screenshotOnRunFailure=true
--reporter mochawesome
--reporter-options "reportDir=cypress/reports/full,overwrite=false,html=true,json=true,timestamp=mmddyyyy_HHMMss"
after_script:
- echo "完整测试套件执行完成"
- find cypress/reports/full/ -name "*.json" -o -name "*.html" | head -10
- npm run test:unit
artifacts:
when: always
paths:
- cypress/screenshots/
- cypress/videos/
- cypress/reports/full/
reports:
junit: cypress/reports/full/*.xml
expire_in: 1 week
when: manual
only:
- web
junit: junit.xml
# 并行测试组1 - 业务功能模块
cypress-business-tests:
# 4. Cypress E2E 测试
e2e_test:
stage: test
image: cypress/browsers:node16.14.2-slim-chrome103-ff102
image: cypress/included:12.7.0 # 内置 Cypress + 浏览器环境
dependencies:
- build
before_script:
- echo "准备运行业务功能测试..."
- npm ci --cache $npm_config_cache --prefer-offline
- npm run preview -- --host 0.0.0.0 --port $VITE_PORT &
- sleep 15
- curl --retry 15 --retry-connrefused --retry-delay 3 http://localhost:$VITE_PORT
- install
script:
- echo "运行业务功能测试用例..."
# 业务核心功能:除尘器概览、设备管理、监控
- npx cypress run
--browser chrome
--headless
--spec "cypress/e2e/{dust-overview,device-management,monitor}.cy.js"
--config video=true,screenshotOnRunFailure=true
--reporter mochawesome
--reporter-options "reportDir=cypress/reports/business,overwrite=false,html=true,json=true,timestamp=mmddyyyy_HHMMss"
- npm run build # 先打包前端
- npx http-server ./dist -p 8080 & # 启动测试服务
- npx wait-on http://localhost:8080
- npx cypress run --browser chrome
artifacts:
when: always
paths:
- cypress/screenshots/
- cypress/videos/
- cypress/reports/business/
reports:
junit: cypress/reports/business/*.xml
expire_in: 1 week
when: manual
only:
- web
- cypress/videos
- cypress/screenshots
# 并行测试组2 - 数据管理模块
cypress-data-tests:
stage: test
image: cypress/browsers:node16.14.2-slim-chrome103-ff102
dependencies:
- build
before_script:
- echo "准备运行数据管理测试..."
- npm ci --cache $npm_config_cache --prefer-offline
- npm run preview -- --host 0.0.0.0 --port $VITE_PORT &
- sleep 15
- curl --retry 15 --retry-connrefused --retry-delay 3 http://localhost:$VITE_PORT
script:
- echo "运行数据管理测试用例..."
# 数据相关功能:采集器、闭环管理、告警
- npx cypress run
--browser chrome
--headless
--spec "cypress/e2e/{collector-list,my-loop,alerts}.cy.js"
--config video=true,screenshotOnRunFailure=true
--reporter mochawesome
--reporter-options "reportDir=cypress/reports/data,overwrite=false,html=true,json=true,timestamp=mmddyyyy_HHMMss"
artifacts:
when: always
paths:
- cypress/screenshots/
- cypress/videos/
- cypress/reports/data/
reports:
junit: cypress/reports/data/*.xml
expire_in: 1 week
when: manual
only:
- web
# 测试报告汇总
generate-test-reports:
stage: reports
image: node:16-alpine
# 5. 构建产物
build:
stage: build
image: node:14
dependencies:
- cypress-basic-tests
- cypress-full-tests
- cypress-business-tests
- cypress-data-tests
before_script:
- echo "准备生成测试报告..."
- npm install -g mochawesome-merge mochawesome-report-generator
- install
script:
- echo "开始合并测试报告..."
- mkdir -p public/reports
- mkdir -p public/assets
# 检查报告文件
- find cypress/reports -name "*.json" | head -10
# 合并所有测试报告
- mochawesome-merge "cypress/reports/**/*.json" > public/reports/merged-report.json || echo "报告合并失败,使用空报告"
# 生成HTML报告
- marge public/reports/merged-report.json --reportDir public/reports --inline --reportTitle "DC-TOM Cypress 测试报告" || echo "HTML报告生成失败"
# 复制媒体文件
- cp -r cypress/videos public/assets/ 2>/dev/null || echo "无视频文件"
- cp -r cypress/screenshots public/assets/ 2>/dev/null || echo "无截图文件"
# 生成索引页面
- |
cat > public/index.html << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>DC-TOM 测试报告</title>
<meta charset="utf-8">
<style>
body { font-family: Arial, sans-serif; margin: 40px; background-color: #f5f5f5; }
.header { text-align: center; margin-bottom: 30px; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
.container { max-width: 800px; margin: 0 auto; }
.links { list-style: none; padding: 0; }
.links li { margin: 15px 0; background: white; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
.links a { text-decoration: none; color: #007cba; font-size: 18px; display: block; padding: 20px; border-radius: 8px; transition: background-color 0.2s; }
.links a:hover { background-color: #f0f8ff; text-decoration: none; }
.icon { margin-right: 10px; font-size: 20px; }
.description { color: #666; font-size: 14px; margin-top: 5px; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>🧪 DC-TOM Cypress 测试报告</h1>
<p><strong>项目:</strong> dctomproject | <strong>分支:</strong> projects</p>
<p><strong>构建时间:</strong> $(date '+%Y-%m-%d %H:%M:%S')</p>
</div>
<ul class="links">
<li>
<a href="reports/merged-report.html">
<span class="icon">📊</span>完整测试报告
<div class="description">查看详细的测试执行结果、通过率统计和失败原因分析</div>
</a>
</li>
<li>
<a href="assets/videos/">
<span class="icon">🎥</span>测试执行视频
<div class="description">观看完整的测试执行过程录像</div>
</a>
</li>
<li>
<a href="assets/screenshots/">
<span class="icon">📸</span>失败截图
<div class="description">查看测试失败时的页面截图,便于问题定位</div>
</a>
</li>
</ul>
</div>
</body>
</html>
EOF
- echo "测试报告生成完成"
- ls -la public/
- npm run build
artifacts:
paths:
- public/
expire_in: 1 month
only:
- web
- projects
- merge_requests
- dist/
# Pages部署 - 展示测试报告
pages:
stage: reports
# 6. 部署
deploy:
stage: deploy
image: alpine:latest
dependencies:
- generate-test-reports
- build
script:
- echo '部署测试报告到GitLab Pages...'
- echo '访问地址 https://liuzhaohui.gitlab.io/dctomproject/'
artifacts:
paths:
- public/
expire_in: 1 month
only:
- web
- projects
\ No newline at end of file
- echo "Deploying..."
# 这里替换成实际的部署命令
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment