微信小程序的测试发布在没有 CI/CD 等相关工具的状况下,存在着以下的问题:html
为了不如上问题的发生,采用微信小程序Jenkins部署方案。java
因微信小程序Jenkins部署依赖微信开发者工具与Jenkins,下面会介绍微信开发者工具除图形化界面的另外两种调用方式与Jenkins安装配置。linux
在使用微信开发者工具http调用与命令行调用前,咱们须要开启微信开发工具安全设置中的CLI/HTTP调用功能,不然http与命令行都不能调用工具。开启路径:设置 -> 安全设置 -> 开启服务端端口。git
经过命令行调用安装完成的工具可执行文件,完成登陆、预览、上传、自动化测试等操做。调用返回码为 0 时表明正常,为 -1 时错误。github
命令行工具所在位置:web
<!--macOs下未更改安装路径,默认位置为:/Applications/wechatwebdevtools.app/Contents/MacOS/cli-->
macOS: <安装路径>/Contents/MacOS/cli
Windows: <安装路径>/cli.bat
复制代码
macOs下命令行调用微信开发工具shell
<!--打开工具-->
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -o
<!--打开路径 /Users/username/demo 下的项目-->
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -o /Users/username/demo
<!--登陆,在终端中打印登陆 base64 形式的二维码-->
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -l --login-qr-output base64
<!--预览,在终端中打印登陆二维码-->
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -p /Users/username/demo
<!--上传路径 /Users/username/demo 下的项目,指定版本号为 1.0.0,版本备注为 initial release-->
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -u 1.0.0@/Users/username/demo --upload-desc 'initial release'
复制代码
更多调用方式见命令行调用npm
http 服务在工具启动后自动开启,HTTP 服务端口号在用户目录下记录,可经过检查用户目录、检查用户目录下是否有端口文件及尝试链接来判断工具是否安装/启动。小程序
端口号文件位置:微信小程序
macOS : ~/Library/Application Support/微信开发者工具/Default/.ide
Windows : ~/AppData/Local/微信开发者工具/User Data/Default/.ide
复制代码
http调用微信开发工具,注:http调用不区分系统,除端口文件位置不一样,调用方式一致。
<!--打开工具 -->
http://127.0.0.1:端口号/open
<!--打开/刷新项目 -->
http://127.0.0.1:端口号/open?projectpath=项目全路径
<!--登陆,取 base64 格式二维码-->
http://127.0.0.1:端口号/login?format=base64
<!--预览路径为 /Users/username/demo 的项目,返回 base64 格式的二维码-->
http://127.0.0.1:端口号/preview?projectpath=%2FUsers%2Fusername%2Fdemo&format=base64
<!--上传路径为 /Users/username/demo 的项目,指定版本号为 v1.0.0,并带上备注test-->
http://127.0.0.1:端口号/upload?projectpath=%2FUsers%2Fusername%2Fdemo&version=v1.0.0&desc=test
复制代码
更多调用方式见:http调用
Jenkins依赖java运行环境,须要先安装java jdk,可在官网下载。注:Jenkins要求java jdk版本为8-11
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
复制代码
brew install jenkins
复制代码
jenkins -v
复制代码
红色标注为Jenkins版本号
<!--注:2.195为Jenkins版本,388为端口号,默认端口为8080-->
java -jar /usr/local/Cellar/jenkins/2.195/libexec/jenkins.war --httpPort=388
复制代码
cat /Users/sung/.jenkins/secrets/initialAdminPassword
复制代码
安装完成后进入主页,选择系统管理 -> 插件管理 -> 可选插件。除默认勾选插件外,咱们还须要安装这些插件,以下:
若是你已经完成上列步骤,那么Jenkins就已经安装完成了,咱们所需的依赖也有了,后续会讲述Jenkins任务配置。
在General中,勾选参数化构建过程。
"项目管理",选择Git,配置以下:
“构建环境”,选择Delete workspace before build starts,构建前清空工做区。
“构建”,选择执行 shell,脚本以下:
# 执行项目构建
npm i --registry=http://registry.npm.taobao.org
npm run ${build_type}:weapp
# 打开微信开发者工具
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -o
# 端口号文件
port=$(cat "/Users/sung/Library/Application Support/微信开发者工具/Default/.ide")
echo "微信开发者工具运行在${port}端口"
return_code=$(curl -sL -w %{http_code} http://127.0.0.1:${port}/open)
if [ $return_code == 200 ]
then
echo "返回状态码200,devtool启动成功!"
else
echo "返回状态码${return_code},devtool启动失败"
exit 1
fi
if [ "$build_type" != "prod" ]
then
echo "发布开发版!"
wget -O $BUILD_ID.png http://127.0.0.1:${port}/preview?projectpath=${WORKSPACE}/dist
# 用于生成带参数的预览码
# /Applications/wechatwebdevtools.app/Contents/MacOS/cli -o -p /Users/sung/Desktop/weapp/dist --preview-qr-output base64@${WORKSPACE}/qrCode.txt --compile-condition '{"pathName":"pages/index/index","query":"agent_no=CN08662274"}'
# npm run create ${build_type}
echo "预览成功!请扫描二维码进入开发版!"
elif [ "$build_type" == 'prod' ]
then
echo "准备上传!"
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -u ${version}@/${WORKSPACE}/dist --upload-desc ${descr}
echo "上传成功!请到微信小程序后台设置体验版并提交审核!"
fi
复制代码
<img src="http://本机ip:启动jenkins端口/job/jenkins任务名称/ws/${BUILD_ID}.png" alt="二维码${BUILD_ID}" width="200" height="200" /> <a href="http://本机ip:启动jenkins端口/job/jenkins任务名称/ws/${BUILD_ID}.png">二维码${BUILD_ID}</a>
复制代码
注:获得建构结果与预期不一致,图片并无显示出来,而是显示了文本信息。这是因为 Jenkins 出于安全的限制,全部描述信息的 Markup Formatter 默认都采用 Plain text 的模式。
在「系统管理」-> 「全局安全配置」中,将 Markup Formatter(标记格式器) 由 Plain text (纯文本) 更改成 Safe HTML 便可。
<!--使用命令行调用生成预览二维码,再将二维码导出为base64存储在工做区下的qrCode.txt文件中-->
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -o -p /Users/sung/Desktop/weapp/dist --preview-qr-output base64@${WORKSPACE}/qrCode.txt --compile-condition '{"pathName":"pages/index/index","query":"agent_no=CN08662274"}'
<!--npm run create命令调用create.js-->
npm run create ${BUILD_ID}
<!--create.js-->
const fs = require('fs');
fs.readFile('./qrCode.txt', function(err, data) {
//若是错误err
if (err) {
console.log(err, '读取文件失败');
} else {
const dataBuffer = new Buffer.from(data.toString(), 'base64');
fs.writeFile(`./${process.argv[2]}.png`, dataBuffer, function(e) {
if (e) {
console.log(e, '写入文件失败');
} else {
console.log('保存成功');
}
});
}
});
复制代码
测试特殊流程,例如扫码场景携带参数,可以使用上面所述关键点2,生成带参数的预览码。
推荐使用体验版测试,每次构建都提交到小程序后台,覆盖以前的体验版。使用体验版有如下优缺点:
优势:
缺点:
推荐将体验版二维码保存在项目中,经过设置Set build description,访问体验版二维码。设置以下:
<img src="http://本机ip:启动jenkins端口/job/jenkins任务名称/ws/体验版二维码名称.png" alt="体验版" width="200" height="200" /> <a href="http://本机ip:启动jenkins端口/job/jenkins任务名称/ws/体验版二维码名称.png">体验版</a>
复制代码
使用体验版测试脚本以下:
# 执行项目构建
npm i --registry=http://registry.npm.taobao.org
npm run ${build_type}:weapp
# 打开微信开发者工具
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -o
port=$(cat "/Users/sung/Library/Application Support/微信开发者工具/Default/.ide")
echo "微信开发者工具运行在${port}端口"
return_code=$(curl -sL -w %{http_code} http://127.0.0.1:${port}/open)
if [ $return_code == 200 ]
then
echo "返回状态码200,devtool启动成功!"
else
echo "返回状态码${return_code},devtool启动失败"
exit 1
fi
if [ "$build_type" != "prod" ]
then
echo "覆盖体验版"
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -u ${version}@/${WORKSPACE}/dist --upload-desc ${build_type}环境,测试
elif [ "$build_type" == 'prod' ]
then
echo "准备上传!"
/Applications/wechatwebdevtools.app/Contents/MacOS/cli -u ${version}@/${WORKSPACE}/dist --upload-desc ${descr}
echo "上传成功!请到微信小程序后台设置体验版并提交审核!"
fi
复制代码
构建选择prod环境,填写版本号与提交信息。
微信公众平台,校验提交信息与版本号,提交审核。
到这里整个流程已经完成了闭环,你们能够尝试一下,开始策马奔腾吧。😂😂😂