背景说明:(下图是我自己在别的网站发的帖子,绝对原创,哎,被51cto封了0.0)微信小号在没有相关工具如作为CI/CD,在程序的测试和发布中存在以下问题:在小程序开发助手中,同一个开发者只能展示一个开发版本。测试同事找开发要二维码,效率低下。本地生成的二维码会携带本地代码,分支机构的其他变化不会及时拉取。为了避免上述问题,采用了Jenkins与微信小程序集成的方案。但是网上的文档都是基于macOS部署的,其实是一回事。唯一不同的是在win10环境下使用批处理文件,需要安装一些特定的软件:wget、node、gitbash(可选)、微信web开发者工具、Jenkins基础![图片上传中...]在介绍实现方案之前,先回顾一下常规的微信小程序发布流程。从上面的流程图可以看出,微信小程序的预览和上传都需要在微信开发者工具中进行。下面我们就来了解一下微信开发者工具提供的上传方式。除了微信开发者工具的图形界面外,微信开发者工具还提供命令行和HTTP服务两个接口,供外部调用进行登录、预览、上传等操作。命令行调用的命令行工具所在位置:macOS:<安装路径>/Contents/Resources/app.nw/bin/cliWindows:<安装路径>/cli.bat以macOS操作系统为例:1.打开开发者工具:/Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli-o其中/Applications/wechatwebdevtools.app/为安装路径。2、登录:/Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli-l输入以上命令行后,终端会打印出登录二维码,使用微信扫码登录在微信端操作完成后,会输出登录成功,如下图:HTTP服务工具启动后自动启动HTTP服务,host固定为127.0.0.1every启动时间,端口号不固定。端口号记录在用户目录下,位置如下:macOS:~/Library/ApplicationSupport/WeChatwebdevelopertools/Default/.ideWindows:~/AppData/Local/WeChatwebdevelopertools/UserData/默认/。ide以macOS操作系统为例:首先需要运行开发者工具,可以使用上面介绍的命令行方式打开微信开发者工具。/Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli-oport=$(cat"/Users/zyy/Library/ApplicationSupport/Wechatwebdevelopertools/Default/.ide")echo"微信developertoolsrunonport${port}"这样可以获取到微信开发者工具的端口号,其中/Users/zyy/为用户目录。1.打开开发者工具:#打开工具http://127.0.0.1:端口号/open#打开/刷新项目http://127.0.0.1:端口号/open?projectpath=完整的项目路径2.登录:#登录,返回图片格式的二维码http://127.0.0.1:portnumber/login#登录,取base64格式的二维码http://127.0.0.1:portnumber/login?format=base64#登录,取base64格式的二维码,写入/Users/用户名/logincode.txthttp://127.0.0.1:端口号/login?format=base64&qroutput=%2FUsers%2Fusername%2Flogincode.txt3,预览:#预览路径为/对于Users/用户名/demo的项目,返回图片格式的二维码http://127.0.0.1:portnumber/preview?projectpath=%2FUsers%2Fusername%2Fdemo#对于预览路径为的项目/Users/用户名/demo,返回base64格式的二维码http://127.0.0.1:portnumber/preview?projectpath=%2FUsers%2Fusername%2Fdemo&format=base64#预览路径为/Users/username/demo的工程,返回base64格式的二维码,并写入/Users/username/logincode.txthttp://127.0.0.1:portnumber/preview?projectpath=%2FUsers%2Fusername%2Fdemo&format=base64&qroutput=%2FUsers%2Fusername%2Flogincode.txt#预览路径为/Users/用户名/demo项目,返回图片格式的二维码,将预览信息输出到/Users/用户名/info.jsonhttp://127.0.0.1:portnumber/preview?projectpath=%2F用户%2fusername%2Fdemo&infooutput=%2Users%2username%2info.json开始部署准备阶段1.安装wget,node,Jenkins,gitbash,微信开发者工具node,Jenkins去官网下载msi文件,方便安装就下了根路径(最好不要把所有需要用到的东西都放在当前用户不能碰的目录下,不然会哭惨)2.安装gitbash,上传公钥到代码库3.配置Jenkins服务权限和更改环境变量(最重要的一步)打开CMD->进入services.msc找到Jenkins右键->属性->登录并重启生效在Jenkins系统管理-全局安全配置页面,修改下拉列表中的标记格式化程序将其另存为安全HTML。本次修改是直接在构建历史中显示二维码图片。JAVA_OPTS-Dsun.jnu.encoding=UTF-8-Dfile.encoding=UTF-8LANGzh.CH.UTF-8设置环境重启变量生效(不写也可以直接写绝对路径)Jenkins插件安装安装以下Jenkins插件并重启:GIT插件Git参数:获取所有分支名称作为参数列表SSHCredentialsPluginGitChangelog:获取Gitcommitlogbuild-name-setterdescriptionsetterplugin:在构建中添加二维码显示历史描述信息PostBuildScriptPlugin:编译后执行脚本NodeJSPlugin:小程序构建需要,使用节点技术AnsiColordescriptionsetter:添加设置构建描述获取图片Jenkins项目创建创建自由风格项目添加执行批量构建,并将下面的胶带粘贴进去[2D码${BUILD_ID}](http://192.168.120.191:8080/job/DEV-sk_platform_consumers_furniture-wechat/ws/${BUILD_ID}.png);;;;;;;;;;;chcp65001::修改字符集setdir=D:\ingo\Jenkins\workspace\DEV-sk_platform_consumers_furniture-wechatsetproject=D:\ingo\Jenkins\workspace\DEV-sk_platform_consumers_furniture-wechat\dist::del/F/S/Q%dir%::rd/S/Q%dir%gitclonegit@gitlab.xxxx.com:cdp/sk_platform_consumers_furniture.git%dir%gitpullgit@gitlab.skong.com:cdp_furn/sk_platform_consumers_furniture.git"C:\ProgramFiles\WinRAR\WinRAR.exe"x-ibck-y-o+node_modules.rar%dir%CALLC:\Users\xxxx\AppData\Roaming\npm\tarobuild--typeweappCALL"D:\weixin\cli.bat"-o::for/f"usebackq"%%ain(`type"C:\Windows\System32\config\systemprofile\AppData\Local\微信web开发者工具\UserData\Default\.ide"`)do@setport=%%a::set/pport=<"C:\Windows\System32\config\systemprofile\AppData\Local\微信web开发者工具\UserData\Default\.ide"FOR/F"usebackqdelims=="%%iIN(`type"C:\Users\xxxx\AppData\Local\微信web开发者工具\UserData\Default\.ide"`)do(echo当前使用端口:%%isetport=%%i)echo%port%echo%BUILD_ID%echo%path%D:\wget\wget.exe-O%BUILD_ID%.pnghttp://127.0.0.1:%port%/preview?projectpath=%project%优化beta2.0chcp65001setdir=%WORKSPACE%\distsetsrcdir=C:\Users\skong\Desktop\tmpset项目=C:\Users\skong\Desktop\upload\%environment%-dist-%JOB_NAME%-%BUILD_ID%setupload=C:\用户\skong\Desktop\uploadmkdir%project%echo%JOB_NAME%>C:\Users\skong\Desktop\upload\name.txtecho"%JOB_NAME%"|D:\Git-bash\usr\bin\awk.exe-F'-''{print$2}'@echoofffor/f"tokens=2delims=-"%%lin(C:\Users\skong\Desktop\upload\name.txt)do(echo%%lsetprojectname=%%l)echo"projectname##%projectname%##"echo"environment%environment%"echo"branch##%branch%"echo"描述##%describe%"echo"version##%version%"CALLrobocopy%srcdir%%WORKSPACE%/purgeecho"测试成功"gitclone-b%branch%git@gitlab.skong.com:cdp_furn/%项目名%.git%WORKSPACE%gitpullgit@gitlab.skong.com:cdp_furn/%项目名%.git"C:\ProgramFiles\WinRAR\WinRAR.exe"x-ibck-y-o+node_modules.rar%WORKSPACE%CALL节点project-handle.js%environment%CALLnpminstallnode-sass@4.11.0CALLnpmrebuildnode-sass@4.11.0CALLsbttgit%environment%CALLC:\Users\skong\AppData\Roaming\npm\tarobuild--typeweappCALLrobocopy%dir%%project%/SCALL"D:\weixin\cli.bat"-oFOR/F"usebackqdelims=="%%iIN(`type"C:\Users\skong\AppData\Local\WeChatwebdevelopertools\UserData\Default\.ide"`)do(echocurrentportused:%%isetport=%%i)echo%port%echo%BUILD_ID%echo%path%CALLD:\wget\wget.exe-O%BUILD_ID%.pnghttp://127.0.0.1:%port%/preview?projectpath=%project%if%uploadif%==prod(CALL"D:\weixin\cli.bat"-u%version%@%project%--upload-desc'%describe%'echo"生产环境预览并上传微信小程序平台")ELSE(echo"测试环境只预览不上传微信小程序平台”)微信小程序限制上传2M文件。当判断微信开发者工具和代码编译没有问题时,出现“400错误”:13:17:50Initializing...13:17:50idePortFile:C:\Users\skong\AppData\Local\微信web开发者工具\UserData\Default\.ide13:17:50IDE服务器已经启动,监听http://127.0.0.1:2508513:17:50initializationfinished13:17:50openIDEsuccess13:17:50当前使用端口:2508513:17:502508513:17:501413:17:50D:\ingo\Jenkins\tools\jenkins.plugins.nodejs.tools.NodeJSInstallation\node11.10;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\ProgramFiles\MicrosoftSQLServer\130\Tools\Binn\;C:\ProgramFiles\dotnet\;C:\ProgramFiles\TortoiseSVN\bin;C:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Enterprise\MSBuild\15.0\Bin;C:\ProgramFiles(x86)\InnoSetup5;D:\Git-bash\cmd;C:\skongsoft\node-v8.9.0-win-x64\;D:\wget;C:\Users\skong\AppData\Local\Microsoft\WindowsApps;C:\Users\skong\AppData\Roaming\npm13:17:50--2019-08-1913:17:50--http://127.0.0.1:25085/预览?projectpath=C:%5CUsers%5Cskong%5CDesktop%5Cupload%5Csit-dist-UAT-sk_platform_consumers_furniture-wechat-1413:17:50正在连接到127.0.0.1:25085...connected.13:17:50已发送HTTP请求,正在等待响应...400BadRequest13:17:572019-08-1913:17:57ERROR400:BadRequest.13:17:5713:17:57《测试环境只预览不上传微信小程序平台》13:17:57Buildstep'ExecuteWindowsbatchcommands'markedbuildasfailure13:17:57[description-setter]Descriptionset:13:17:57Finished:FAILURE建项目的时候记得先登录微信开发者工具。如果不登录,报错如下:添加成员,注意代码中的appid是否有问题。Windows使用Linux命令。编写构建脚本首先,如果要使用微信开发者工具,可能要用mac或者windows,但不是每个运维小哥都熟练使用dos命令,所以可以在windows上下载一个linux命令包,如图上面echo%path%把linuxforwin命令的exe文件用linux命令chcp65001setdir=%WORKSPACE%\distsetsrcdir=C:\Users\skong\Desktop\tmpsetproject=C:\Users\skong\桌面\上传\%environment%-dist-%JOB_NAME%-%BUILD_ID%setupload=C:\Users\skong\Desktop\uploadmkdir%project%echo%JOB_NAME%>C:\Users\skong\Desktop\upload\name.txtecho"%JOB_NAME%"|awk-F'-''{print$2}'@echoofffor/f"tokens=2delims=-"%%lin(C:\Users\skong\Desktop\upload\name.txt)做(echo%%lsetprojectname=%%l)echo"projectname##%projectname%##"echo"environment%environment%"echo"branch##%branch%"echo"describe##%describe%"echo"version##%version%"gitclone-b%branch%git@gitlab.skong.com:cdp_furn/%projectname%.git%WORKSPACE%gitpullgit@gitlab.skong.com:cdp_furn/%projectname%.git“C:\-sass@4.11.0CALLsbttgit%environment%CALLC:\Users\skong\AppData\Roaming\npm\tarobuild--typeweappCALLcp-r%dir%%project%CALL"D:\weixin\cli.bat"-oFOR/F"usebackqdelims=="%%iIN(`cat"C:\Users\skong\AppData\Local\微信web开发者工具\UserData\Default\.ide"`)do(echo当前使用端口:%%isetport=%%i)echo%port%echo%BUILD_ID%echo%path%CALLwget-O%BUILD_ID%.pnghttp://127.0.0.1:%port%/preview?projectpath=%project%if%uploadif%==prod(CALL"D:\weixin\cli.bat"-u%version%@%project%--upload-desc'%describe%'echo"生产环境预览并上传微信小程序平台")ELSE(echo"测试环境只预览不上传微信小程序平台")
