小程序自动化构建与版本管理方案优化

背景与业务

作为SAAS服务商,理论场景开发应用都要可以实现1对多,即可以通过账号体系授权登录实现客户登录应用。但是这个仅限理论场景。现实的问题是你可能会同时维护20个以上小程序。

业务痛点

服务商的大部分客户都是托管授权的形式,私有定制也是如此。随着私有定制客户增加,本地维护的小程序会越来越多。在迭代发布周期中,每个小程序都通过微信小程序开发工具上传真的是太浪费时间,这个过程存在太多的重复工作。基于这个场景我们希望结合持续集成工具实现构建即上传,把人工从重复劳动中解放出来。同时在构建的构建的时候插入动态的版本号便于业务跟踪问题。

解决方案

需要解决的问题如下:

  • 结合构建工具teamcity实现构建即上传的
  • 结合teamcity + dockefile实现动态插入版本号

关键技术:

构建上传

查询小程序的开发问题可以看到在工具-开发辅助提供了:miniprogram-ci。npm包的能力如下:开发者可不打开小程序开发者工具,独立使用 miniprogram-ci 进行小程序代码的上传、预览等操作。

官方地址:developers.weixin.qq.com/miniprogram...

私钥设计:

bash 复制代码
- mini-app
 - app
 - devkey/private.wx0000000000.key
 - prekey/private.wx0000000001.key
 - prodkey/private.wx0000000002.key
 - siyouone/private.wx0000000003.key
 - siyoutwo/private.wx0000000004.key
 - upload.wx.js
 ......

动态版本号

动态版本号:期望项目在构建的时候同时生成一个固定的版本号,可以方便业务排序线上问题。

  • 版本号要区分SAAS、私有化小程序,同时与接口请求头绑定
  • 版本号要用年月日组成

版本号设计:

bash 复制代码
SAAS.20250410
PRIVATE.ONE.20250410
PRIVATE.TWO.20250410

代码实现:

通过teamcity + dockerfile实现代码一键上传和动态版本号

  • teamcity里面动态配置env、appid、baseUrl、version
  • dockfile接收动态配置的参数,然后执行相对应的脚本
  • 小程序接收teamcity生成的环境变量,动态设置到请求头
bash 复制代码
环境变量env: dev、pre、prod、......
小程序AppId: saaa.appid siyou.appid ......
接口地址:baseUrl
版本号:version

核心脚本

小程序本地维护的上传脚本

javascript 复制代码
const ci = require('miniprogram-ci');
const env = process.env.NODE_ENV
const appid = process.env.APP_ID || ''
const version = process.env.VERSION || ''
const desc = process.env.DESC || ''
const privateKeyPath = process.cwd() + '/' +`${env}key/private.`+ `${appid}` + '.key';

const project = new ci.Project({
  appid: appid,
  type: 'miniProgram',
  projectPath: process.cwd() + '/dist',
  privateKeyPath: privateKeyPath,
  ignores: [
    'node_modules/**/*',
  ],
});

ci.upload({
  project,
  version,
  desc,
  setting: {
    autoPrefixWXSS: true,
    minifyJS: true,
    minifyWXML: true,
    minifyWXSS: true,
  },
})
  .then((res) => {
    console.log('上传成功');
  })
  .catch((error) => {
    if (error.errCode == -1) {
      console.log('上传成功');
    }
    console.log('上传失败');
    process.exit(-1);
  });

运维效率对比

指标 传统方式 自动化方案 提升幅度
单次操作耗时 3分钟 20秒 89%↓
版本追溯效率 手动查询 自动标记 80%↑

最佳实践建议

  • CI/CD管道运行时动态注入版本号
  • 代码合并到release分支teamcity自动触发
相关推荐
轻动琴弦19 小时前
VoltTool —— 一站式在线开发者工具平台,69+实用工具免费使用
前端·chrome
就叫飞六吧19 小时前
不同站点iframe嵌套种cookie、localstorege.set() 关系
前端
星栈19 小时前
LiveView 怎么测:从组件测试到端到端,我终于不再只敢手点页面了
前端·前端框架·elixir
蜡台19 小时前
uniapp vue2 转 vue3
前端·javascript·uni-app·vue3·vue2
Web4Browser19 小时前
Headless 浏览器自动化适合哪些任务?巡检、截图和提交动作要分级
运维·前端·自动化
用户0595401744619 小时前
把前端内存泄漏排查从2小时压到5分钟,我们把它集成进了CI
前端·css
WindfallSheng20 小时前
从Vibe Coding到Spec Coding:一套可落地的AI-SDD企业级研发实战工程
javascript·vue.js
Asize20 小时前
Agent 入门:从 LLM 与 Agent 的区别到 Function Calling
javascript·人工智能
申君健248641827720220 小时前
Vapor 核心数据结构:Block原理
前端
Csvn20 小时前
工程化专题 | 改完组件保存,浏览器毫无反应,重启 dev server 又好了——气不气?
前端