unibest持续集成:CI/CD流水线实战指南
还在为uniapp多平台打包发布而烦恼?每次手动执行pnpm build:h5、pnpm build:mp、pnpm build:app,不仅耗时耗力,还容易出错?本文将为你揭秘如何为unibest项目搭建完整的CI/CD(持续集成/持续部署)流水线,实现自动化构建、测试和部署,让你的开发效率提升300%!
通过本文,你将获得:
- ✅ GitHub Actions完整CI/CD配置方案
- ✅ 多平台自动化构建与发布流程
- ✅ 代码质量检查与自动化测试集成
- ✅ 版本管理与变更日志自动生成
- ✅ 生产环境一键部署最佳实践
为什么unibest需要CI/CD?
unibest作为多端统一的开发框架,支持H5、微信小程序、APP等多个平台的构建发布。传统手动操作面临诸多痛点:
CI/CD流水线架构设计
基于unibest的技术栈特点,我们设计了一套完整的CI/CD解决方案:
GitHub Actions实战配置
基础工作流配置
创建 .github/workflows/ci-cd.yml 文件:
name: UNIBEST CI/CD Pipeline
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
env:
NODE_VERSION: '18.x'
PNPM_VERSION: '8.x'
jobs:
# 代码质量检查
lint-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: ${{ env.PNPM_VERSION }}
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run lint
run: pnpm lint
- name: Type checking
run: pnpm type-check
# 多平台构建
build-platforms:
needs: lint-and-test
runs-on: ubuntu-latest
strategy:
matrix:
platform: [h5, mp-weixin, app]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
- name: Setup pnpm
uses: pnpm/action-setup@v2
with:
version: ${{ env.PNPM_VERSION }}
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Build ${{ matrix.platform }}
run: pnpm build:${{ matrix.platform }}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}-build
path: dist/build/${{ matrix.platform == 'mp-weixin' ? 'mp-weixin' : matrix.platform }}
高级部署配置
针对不同平台的部署需求,我们需要分别配置:
# H5部署到服务器
deploy-h5:
needs: build-platforms
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Download h5 artifact
uses: actions/download-artifact@v4
with:
name: h5-build
- name: Deploy to server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: /var/www/unibest-app
# 微信小程序自动上传
deploy-mp-weixin:
needs: build-platforms
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Download weixin artifact
uses: actions/download-artifact@v4
with:
name: mp-weixin-build
- name: Setup微信开发者工具
run: |
wget https://dldir1.qq.com/WechatWebDev/download-1000/wechat_devtools_1.06.2303220_amd64.deb
sudo dpkg -i wechat_devtools_1.06.2303220_amd64.deb
- name: 登录并上传
run: |
cli --login --username ${{ secrets.WECHAT_USERNAME }} --password ${{ secrets.WECHAT_PASSWORD }}
cli --upload --project ./mp-weixin-build --version 1.0.0 --desc "CI自动构建"
环境变量与密钥管理
为确保安全性,所有敏感信息都通过GitHub Secrets管理:
| 变量名称 | 描述 | 示例值 |
|---|---|---|
SSH_PRIVATE_KEY | 服务器SSH私钥 | -----BEGIN RSA PRIVATE KEY----- |
REMOTE_HOST | 服务器地址 | example.com |
REMOTE_USER | 服务器用户名 | deploy |
WECHAT_USERNAME | 微信开发者账号 | developer@example.com |
WECHAT_PASSWORD | 微信开发者密码 | ******** |
版本管理与自动发布
语义化版本控制
配置自动版本管理和CHANGELOG生成:
name: Auto Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install dependencies
run: pnpm install
- name: Create Release
uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
dist/build/h5/**/*
dist/build/mp-weixin/**/*
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
变更日志自动生成
配置commitizen和standard-version来自动生成CHANGELOG:
{
"scripts": {
"release": "standard-version",
"release:minor": "standard-version --release-as minor",
"release:major": "standard-version --release-as major",
"release:patch": "standard-version --release-as patch"
},
"devDependencies": {
"standard-version": "^9.5.0",
"commitizen": "^4.3.0",
"cz-conventional-changelog": "^3.3.0"
}
}
质量保证与测试策略
代码质量检查矩阵
| 检查类型 | 工具 | 配置文件 | 执行命令 |
|---|---|---|---|
| ESLint代码规范 | ESLint | .eslintrc.js | pnpm lint |
| TypeScript类型检查 | Vue-TSC | tsconfig.json | pnpm type-check |
| 提交消息规范 | commitlint | .commitlintrc.js | npx commitlint |
| 依赖安全检查 | npm audit | package.json | pnpm audit |
自动化测试集成
# 测试工作流
test-suite:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
- run: pnpm install
- name: Run unit tests
run: pnpm test:unit
- name: Run component tests
run: pnpm test:component
- name: Run e2e tests
run: pnpm test:e2e
env:
TEST_URL: http://localhost:9000
性能优化与缓存策略
构建缓存配置
- name: Cache node modules
uses: actions/cache@v3
with:
path: |
~/.pnpm-store
node_modules
dist
key: ${{ runner.os }}-node-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-node-
依赖安装优化
# 使用frozen-lockfile确保依赖一致性
pnpm install --frozen-lockfile
# 生产环境安装,减少不必要的依赖
pnpm install --production --frozen-lockfile
监控与告警机制
构建状态监控
配置Slack或钉钉通知,实时了解构建状态:
- name: Notify Slack on failure
if: failure()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
channel: '#ci-cd-alerts'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
性能指标收集
集成Lighthouse CI进行性能监控:
- name: Run Lighthouse CI
run: |
pnpm install -g @lhci/cli
lhci autorun --upload.target=temporary-public-storage
常见问题与解决方案
构建失败排查指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
pnpm install 失败 | 网络问题或锁文件冲突 | 使用国内镜像源,清理缓存 |
| TypeScript类型错误 | 类型定义不匹配 | 检查uni-types版本兼容性 |
| 小程序构建失败 | 微信开发者工具未安装 | 在CI中自动安装开发者工具 |
| H5部署失败 | 文件权限问题 | 配置正确的部署目录权限 |
环境差异处理
不同构建环境可能存在差异,建议:
- 锁定Node.js版本:确保开发、测试、生产环境一致
- 使用容器化:通过Docker确保环境一致性
- 配置管理:将环境变量统一管理,避免硬编码
总结与最佳实践
通过本文的CI/CD流水线配置,unibest项目可以实现:
- 自动化构建:代码提交后自动触发多平台构建
- 质量保障:集成代码检查、测试、类型检查
- 一键部署:支持H5、小程序、APP多平台部署
- 版本管理:自动生成版本号和变更日志
- 监控告警:实时掌握构建状态和性能指标
实施建议
- 渐进式实施:先从简单的代码检查开始,逐步完善流水线
- 文档化:为团队提供详细的CI/CD使用文档
- 定期回顾:定期评估流水线效果,持续优化
- 安全第一:妥善管理敏感信息,使用密钥管理
现在就开始为你的unibest项目配置CI/CD流水线,享受自动化带来的高效开发体验吧!
提示:本文配置基于GitHub Actions,其他CI/CD平台(如GitLab CI、Jenkins)可参考类似思路进行适配。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



