字节笔记本
2026年7月12日
微信小程序自动化部署完整指南:从 CI 到 miniprogram-ci 上传
本文整理微信小程序自动化部署的完整流程,从分支环境设计、CI 流水线搭建、miniprogram-ci 上传,到多商户 SaaS 的第三方平台方案,帮你把繁琐的手动发布变成一条可靠的自动化流水线。
整体思路
不要一开始就追求「提交代码后自动上线」。把流程拆开,该自动的自动,该人工的留人工:
代码提交 → 自动检查 → 自动构建 → 自动生成体验版 → 人工验收 → 自动上传开发版 → 人工提交审核 → 人工确认发布
微信官方的 miniprogram-ci 可以脱离微信开发者工具完成小程序的编译、预览和上传,这是整个自动化方案的基础。
分支与环境设计
feature/* 开发分支
↓ PR
develop 测试环境
↓ 合并
main 生产候选版本
↓ Git Tag
v1.2.0 正式发布版本每个分支对应不同动作:
| 触发条件 | 自动执行 | 产生结果 |
|---|---|---|
提交到 feature/* | ESLint、类型检查、单元测试 | 判断代码能否合并 |
合并到 develop | 构建测试环境、生成预览二维码 | 测试人员扫码验收 |
合并到 main | 构建生产环境、上传开发版本 | 微信后台出现新版本 |
创建 v1.2.0 Tag | 上传正式候选版本、生成发布记录 | 准备提交审核 |
| 审核通过 | 人工确认发布 | 正式上线 |
核心原则:构建和上传自动化,审核与正式发布保留人工确认。
完整流水线
1. 拉取代码
git checkout main2. 安装依赖
pnpm install --frozen-lockfile3. 代码质量检查
pnpm lint
pnpm typecheck
pnpm test任何一步失败,都停止后续部署。
4. 注入环境变量
建议区分三个环境:
.env.development.env.staging.env.production
例如:
VITE_API_BASE_URL=https://api.example.com
VITE_ENV=productionAppSecret、代码上传密钥等敏感信息不要放入小程序代码或 Git 仓库。
5. 构建微信小程序
不同技术栈只需要替换这一条命令:
# uni-app
pnpm build:mp-weixin
# Taro
pnpm build:weapp
# 原生微信小程序
pnpm build最终获得微信小程序构建目录:
dist/build/mp-weixin(uni-app)dist/weapp(Taro)miniprogram(原生)
6. 生成体验二维码
develop 分支调用 miniprogram-ci 的 preview,自动生成体验二维码,作为 CI 构建产物上传:
develop 更新
→ 构建测试版
→ 生成二维码
→ 上传到 GitHub Actions Artifacts
→ 通知测试人员扫码7. 上传开发版本
测试通过后调用 miniprogram-ci 的 upload:
import ci from "miniprogram-ci";
const project = new ci.Project({
appid: process.env.WX_APPID,
type: "miniProgram",
projectPath: process.env.WX_PROJECT_PATH,
privateKeyPath: process.env.WX_PRIVATE_KEY_PATH,
ignores: ["node_modules/**/*", ".git/**/*"],
});
await ci.upload({
project,
version: process.env.RELEASE_VERSION,
desc: process.env.RELEASE_DESC ?? "自动化构建",
setting: {
es6: true,
minify: true,
codeProtect: true,
autoPrefixWXSS: true,
},
onProgressUpdate: console.log,
});
console.log("小程序开发版本上传完成");GitHub Actions 完整配置
name: Deploy WeChat Mini Program
on:
push:
branches:
- develop
- main
tags:
- "v*"
jobs:
deploy:
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Lint
run: pnpm lint
- name: Type check
run: pnpm typecheck
- name: Build mini program
run: pnpm build:mp-weixin
env:
NODE_ENV: production
API_BASE_URL: ${{ secrets.API_BASE_URL }}
- name: Restore upload private key
shell: bash
run: |
mkdir -p .ci
printf '%s' "${WX_PRIVATE_KEY}" > .ci/private.key
chmod 600 .ci/private.key
env:
WX_PRIVATE_KEY: ${{ secrets.WX_PRIVATE_KEY }}
- name: Generate version
shell: bash
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
echo "RELEASE_VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
else
echo "RELEASE_VERSION=0.0.${GITHUB_RUN_NUMBER}" >> "$GITHUB_ENV"
fi
- name: Upload mini program
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
run: node scripts/upload-wechat.mjs
env:
WX_APPID: ${{ secrets.WX_APPID }}
WX_PROJECT_PATH: dist/build/mp-weixin
WX_PRIVATE_KEY_PATH: .ci/private.key
RELEASE_VERSION: ${{ env.RELEASE_VERSION }}
RELEASE_DESC: ${{ github.event.head_commit.message }}
- name: Generate preview QR code
if: github.ref == 'refs/heads/develop'
run: node scripts/preview-wechat.mjs
env:
WX_APPID: ${{ secrets.WX_APPID }}
WX_PROJECT_PATH: dist/build/mp-weixin
WX_PRIVATE_KEY_PATH: .ci/private.key
QR_OUTPUT_PATH: preview-qrcode.png
- name: Upload preview QR code
if: github.ref == 'refs/heads/develop'
uses: actions/upload-artifact@v4
with:
name: wechat-preview-qrcode
path: preview-qrcode.png需要提前配置的内容
在微信公众平台获取:
- 小程序 AppID
- 代码上传密钥
private.key - 上传 IP 白名单
在 GitHub Secrets 中配置:
| Secret 名 | 说明 |
|---|---|
WX_APPID | 小程序 AppID |
WX_PRIVATE_KEY | 代码上传密钥内容 |
API_BASE_URL | 后端 API 地址 |
代码上传密钥能执行预览和上传操作,应当单独存放,不能提交到仓库。开启上传 IP 白名单后,只有白名单内的出口 IP 才能上传,因此更适合使用具有固定公网 IP 的自托管 Runner。
为什么不建议自动正式发布
对于单个、自主开发的小程序,推荐自动化到「上传开发版本」为止:
自动上传开发版
→ 测试负责人确认
→ 运营人员提交审核
→ 审核通过
→ 负责人点击发布原因很现实:
- 审核资料可能涉及服务类目、隐私说明和功能页面
- 后端接口与数据库迁移可能尚未完成
- 自动发布后发生故障,回滚不像普通网站那么直接
- 提交审核和正式上线属于业务动作,不只是技术动作
正式发布前保留一个人工审批节点最稳妥。
多商户 SaaS 的全自动方案
如果项目需要同时管理几十甚至几百个商户小程序,不要为每个小程序保存一份上传密钥,而应注册微信开放平台第三方平台:
开发小程序模板
→ 上传到第三方平台草稿箱
→ 添加到模板库
→ 商户小程序扫码授权
→ 调用接口部署模板
→ 生成体验版
→ 提交审核
→ 查询审核结果
→ 自动或人工发布第三方平台可以通过模板和代码管理接口,为多个已授权小程序批量部署代码、提交审核和发布,更适合微信生态 SaaS。
推荐路线
先采用这条路线:
GitHub 提交
→ 自动测试
→ 自动构建
→ develop 自动生成二维码
→ 测试确认
→ main 自动上传开发版
→ 人工提审
→ 人工发布等未来需要为大量客户部署同一套小程序时,再升级到微信开放平台第三方平台方案:模板化部署 → 批量提审 → 批量发布。
这样既能减少开发者工具的手动操作,又不会因为过度自动化把有问题的版本直接推到线上。