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

背景与业务

作为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自动触发
相关推荐
Hi~晴天大圣14 分钟前
HTML onclick用法
前端·html
速易达网络15 分钟前
HTML<output>标签
javascript·css·css3
fthux18 分钟前
孩子的名字有救了
微信小程序·typescript·ai编程
!win !1 小时前
前端跨标签页通信方案(上)
前端·javascript
xw51 小时前
前端跨标签页通信方案(上)
前端·javascript
烛阴1 小时前
Python数据可视化:从零开始教你绘制精美雷达图
前端·python
全栈前端老曹1 小时前
【前端组件封装教程】第3节:Vue 3 Composition API 封装基础
前端·javascript·vue.js·vue3·组合式api·组件封装
answerball2 小时前
Webpack:从构建流程到性能优化的深度探索
javascript·webpack·前端工程化
LinXunFeng2 小时前
Flutter 拖拉对比组件,换装图片前后对比必备
前端·flutter·开源
BD_Marathon2 小时前
【PySpark】安装测试
前端·javascript·ajax