如何实现小程序代码自动上传
前言
miniprogram-ci 是从微信开发者工具中抽离的关于小程序/小游戏项目代码的编译模块。
开发者可不打开小程序开发者工具,独立使用 miniprogram-ci 进行小程序代码的上传、预览等操作。
获取小程序代码上传密钥和配置IP白名单
- 打开微信公众平台后台-> 开发 -> 开发管理 -> 开发设置 -> 小程序代码上传 -> 小程序代码上传密钥(如果没有,点击重置并下载保存好)
- 打开微信公众平台后台-> 开发 -> 开发管理 -> 开发设置 -> 小程序代码上传 -> IP白名单(填写用于打包编译上传小程序代码的服务器的IP地址)
编写上传小程序代码的脚本
新建ci文件夹并将各个环境的上传密钥保存到ci文件夹下面,ci/private-key/development.key, ci/private-key/test.key, ci/private-key/production.key,
初始化miniprogram-ci包
npm install miniprogram-ci --save-dev
- 编写上传小程序代码的脚本 ci文件夹下面,新建文件setting.json
{
"version": "v1.0.0",
"desc": "机器人上传 v1.0.0",
"setting": {
"es6": true,
"es7": true,
"minify": true,
"minifyJS": true,
"minifyWXML": true,
"minifywXSS": true,
"autoPrefixWXSS": false,
"codeProtect": true
}
}
ci文件夹下面,新建文件 upload.js
const path = require('path')
const ci = require('miniprogram-ci')
const ENV = process.argv[2]
const { appid } = require(`../src/project.config.${ENV}.json`)
const { version, desc, setting } = require('./setting.json')
console.log('appid: ' + appid)
console.log('version: ' + version)
console.log('desc: ' + desc)
const project = new ci.Project({
appid,
type: 'miniProgram',
projectPath: path.join(__dirname, '../dist'),
privateKeyPath: path.join(__dirname, `./private-key/${ENV}.key`),
ignores: ['node modules/**/*'],
})
// 上传代码
(async () => {
try {
const result = await ci.upload({
project,
desc,
version,
setting,
onProgressUpdate: console.log,
})
console.log('上传成功', result)
} catch (error) {
console.log('上传失败:', error)
}
})()
修改package.json,增加下面命令
"scripts": {
"upload:dev": "node ./ci/upload.js development",
"upload:uat": "node ./ci/upload.js test",
"upload:prod": "node ./ci/upload.js production",
},
配置持续集成和CI脚本
例如coding上的配置如下:
pipeline {
agent any
stages {
stage('检出') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: GIT_BUILD_REF]],
extensions: [[$class: 'CloneOption', noTags: true, depth: 1, shallow: true]],
userRemoteConfigs: [[
url: GIT_REPO_URL,
credentialsId: CREDENTIALS_ID
]]])
}
}
stage('构建') {
steps {
echo '构建中...'
script {
sh 'node -v'
sh 'npm -v'
sh 'npm run cache dir'
sh 'yarn config set registry "https://registry.npmmirror.com"'
sh 'npm install'
sh 'npm run build:dev'
}
echo '打包完成.'
}
}
stage('上传') {
steps {
echo '上传中...'
script {
sh 'yarn upload:dev'
}
echo '上传完成.'
}
}
}
}