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

背景与业务

作为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 小时前
前端转AI要了解的技术,其他人不用看。前端架构基础之:让Js的计算运行在GPU上
前端·aigc·ai编程
IT_陈寒9 小时前
Python的列表拷贝坑得我原地打转
前端·人工智能·后端
恋猫de小郭9 小时前
Dart 3.13 的到底改了什么?为什么很重要?有什么坑?
android·前端·flutter
这是个栗子9 小时前
前端开发中的常用工具函数(十):JavaScript 数组遍历
javascript·map·遍历·filter·foreach·for·for...of
FYKJ_20109 小时前
django学习成绩预警系统10905
java·javascript·spring boot·python·spark·django·php
云浪9 小时前
给大模型装上"手":三分钟看懂 AI Agent 的 Tool 工具调用
javascript·人工智能·node.js
风月说与山鬼9 小时前
六、React事件
前端·javascript·react.js
岁岁种桃花儿9 小时前
Vue核心语法第十四篇:列表过滤
前端·javascript·vue.js
晓得迷路了9 小时前
栗子前端技术周刊第 143 期 - npm 攻击事件、Bun 1.4...
前端·javascript
YHHLAI9 小时前
实战 Vibe Coding:用 AI 从零搭一个 React 待办清单
前端·人工智能·react.js