以下我们是用了Jenkinsfile结合微信小程序CI创建的自动化构建微信小程序
如果是QQ小程序,可以参考此篇文章 使用Jenkins持续集成部署QQ小程序
1.打开微信公众平台-小程序-开发-开发管理-开发设置-小程序代码上传,获取上传密钥,并配置上传白名单
2.在框架根目录新建一个build文件夹,将下载的密钥“private.wx.key”放到build文件夹下
3.按照小程序项目代码的编译模块miniprogram-ci
npm install miniprogram-ci --save
4.新建一个preview.wx.js,代码如下:
//预览
const rawArgv = process.argv.slice(2)
let robot = 1,
qrcode = 'dev'
rawArgv.forEach(value => {
if (value.indexOf('--robot=') >= 0) {
robot = value.slice(8)
} else if (value.indexOf('--qrcode=') >= 0) {
qrcode = value.slice(9)
}
})
console.log('robot', robot)
const ci = require('miniprogram-ci')
let {
version: version,
description: desc
} = require('../package.json')
if (!version) version = 'v1.0.0'
if (!desc) desc = new Date() + '上传'
console.log('version', version)
console.log('desc', desc)
console.log('process.cwd()', process.cwd())
const project = new ci.Project({
appid: 'wx712144a6c08c0d59',
type: 'miniProgram',
projectPath: process.cwd() + '/dist',
privateKeyPath: process.cwd() + '/build/private.wx.key',
ignores: ['node_modules/**/*'],
})
ci.preview({
project,
desc,
setting: {
// es6: true,
minify: true,
},
robot,
qrcodeFormat: 'image',
qrcodeOutputDest: process.cwd() + `/build/qrcode/${qrcode}.jpg`,
onProgressUpdate: console.log,
// pagePath: 'pages/index/index', // 预览页面
// searchQuery: 'a=1&b=2', // 预览参数 [注意!]这里的`&`字符在命令行中应写成转义字符`\&`
// scene: 1001
}).then(res => {
console.log(res)
console.log(`${qrcode}环境编译成功,可通过小程序助手'ci机器人${robot}提交'的版本进入预览`)
}).catch(error => {
if (error.errCode == -1) {
console.log(`${qrcode}环境编译成功,可通过小程序助手'ci机器人${robot}提交'的版本进入预览`)
}
console.log(error)
console.log(qrcode + '环境编译失败')
process.exit(-1)
})
5.新建一个upload.wx.js,代码如下:
//上传
const ci = require('miniprogram-ci')
let {
version: version,
description: desc
} = require('../package.json')
if (!version) version = '1.0.0'
if (!desc) desc = new Date() + '上传'
const project = new ci.Project({
appid: 'wx712144a6c08c0d59',
type: 'miniProgram',
projectPath: process.cwd() + '/dist',
privateKeyPath: process.cwd() + '/build/private.wx.key',
ignores: ['node_modules/**/*'],
})
ci.upload({
project,
version,
desc,
setting: {
es6: true,
minify: true,
},
onProgressUpdate: console.log,
robot: 30
}).then(res => {
console.log(res)
console.log('上传成功,请前往微信公众平台-小程序-开发版本,查看“ci机器人30”提交的版本进行提交审核')
}).catch(error => {
if (error.errCode == -1) {
console.log('上传成功,请前往微信公众平台-小程序-开发版本,查看“ci机器人30”提交的版本进行提交审核')
}
console.log(error)
console.log('上传失败')
process.exit(-1)
})
6.在package.json的scripts字段里加几条对应各个环境的条命令
"scripts": {
"preview": "npm run build:dev && node build/preview.wx.js --robot=1 --qrcode=dev",
"preview:sandbox": "npm run build:sandbox && node build/preview.wx.js --robot=2 --qrcode=sandbox",
"preview:prod": "npm run build:prod && node build/preview.wx.js --robot=3 --qrcode=prod",
"upload": "cross-env NODE_ENV=production RUN_ENV=pro wepy build --no-cache && node build/upload.wx.js"
}
然后就交给运维,合并分支时促发对应的环境命令了,最后发版时调用“upload”的命令就可以在小程序审核那里看到了