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

背景与业务

作为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自动触发
相关推荐
凤城老人9 分钟前
从 PyQt6 到 Electron:给 Edge TTS 做一个“多角色配音机“的踩坑手记
javascript·typescript·electron
Dovis(誓平步青云)13 分钟前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan1 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_1 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒2 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技2 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
星光开发者2 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
yivifu2 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
weixin_448290253 小时前
书庐开发实战教学
javascript·css·html
默_笙3 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript