工程化
3 min read

构建可扩展的小程序 CI/CD 流水线

2024-12-20by LZG
#MiniProgram#DevOps#CI/CD

背景

随着公司 SaaS 业务的发展,我们需要维护上百个客户的小程序。传统的人工发布模式效率低下且容易出错。

方案设计

核心工具

  • Jenkins: 任务调度与流水线管理。
  • miniprogram-ci: 微信官方提供的命令行工具,支持代码上传、预览等。
  • Docker: 构建环境隔离。

架构图

graph LR
    Git --> Jenkins
    Jenkins --> Docker[Docker Container]
    Docker --> Build[npm install & build]
    Build --> Upload[miniprogram-ci upload]
    Upload --> Wechat[微信后台]

关键实现

1. 动态注入配置

我们需要在构建时动态注入 project.config.json 中的 appid 和环境变量。

const ci = require('miniprogram-ci')
const projectConfig = require('./project.config.json')

// 从环境变量获取 AppID
const appId = process.env.APP_ID || projectConfig.appid

const project = new ci.Project({
  appid: appId,
  type: 'miniProgram',
  projectPath: './dist',
  privateKeyPath: `./keys/private.${appId}.key`,
  ignores: ['node_modules/**/*'],
})

2. 版本号管理

使用语义化版本号,并自动生成 Changelog。

成果

  • 效率提升:单个小程序发布时间从 30 分钟缩短至 5 分钟。
  • 质量保障:消除了人工操作导致的环境配置错误。
  • 可追溯:每一次发布都有据可查,支持一键回滚。

展望

未来计划引入 AI Code Review,在流水线中自动检查代码规范和潜在 Bug。