摘要:總結(jié)本文以微信小程序常規(guī)的發(fā)布流程為切入點,循序漸進地介紹了如何集成實現(xiàn)微信小程序預(yù)覽上傳功能。
本文首發(fā)于 https://github.com/yingye/Blo... ,歡迎各位關(guān)注我的Blog,正文以issue形式呈現(xiàn),喜歡請點star,訂閱請點watch~背景
微信小程序的測試發(fā)布在沒有 CI/CD 等相關(guān)工具的情況下,存在著如下的問題:
小程序開發(fā)助手中,同一個開發(fā)者只能顯示一個開發(fā)版本
測試同事找開發(fā)要二維碼,效率較低
本地生成的二維碼會出現(xiàn)攜帶本地代碼、未及時拉取分支其他改動等問題
為了避免如上問題的發(fā)生,采用微信小程序集成 Jenkins 的方案。
基礎(chǔ)在介紹實現(xiàn)方案之前,先來回顧一下常規(guī)的微信小程序發(fā)布流程。
從上面的流程圖可以看出,微信小程序預(yù)覽、上傳都是需要在微信開發(fā)者工具中進行的,接下來了解一下微信開發(fā)者工具提供的上傳方式。
微信開發(fā)者工具除了圖形化界面,微信開發(fā)者工具還提供了命令行與 HTTP 服務(wù)兩種接口供外部調(diào)用,來進行登錄、預(yù)覽、上傳等操作。
命令行調(diào)用命令行工具所在位置:
macOS: <安裝路徑>/Contents/Resources/app.nw/bin/cli
Windows: <安裝路徑>/cli.bat
以 macOS 操作系統(tǒng)示例:
1、打開開發(fā)者工具:
/Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli -o
其中,/Applications/wechatwebdevtools.app/為安裝路徑。
2、登錄:
/Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli -l
輸入上面的命令行后,終端中打印出登錄二維碼,使用微信掃碼登錄。在微信端完成操作之后,會輸出 login success,如下圖所示:
如果想得到 base64 形式的二維碼,可以使用下面的命令:
# 登錄,在終端中打印登錄 base64 形式的二維碼 cli -l --login-qr-output base64 # 登錄,二維碼轉(zhuǎn)成 base64 并存到文件 /Users/username/code.txt cli -l --login-qr-output base64@/Users/username/code.txt
更多 API 可以參考 命令行調(diào)用 。
HTTP 服務(wù)HTTP 服務(wù)在工具啟動后自動開啟,每次開啟 host 固定為 127.0.0.1,端口號并不固定。端口號在用戶目錄下記錄,位置如下:
macOS : ~/Library/Application Support/微信web開發(fā)者工具/Default/.ide
Windows : ~/AppData/Local/微信web開發(fā)者工具/User Data/Default/.ide
以 macOS 操作系統(tǒng)示例:
首先需要運行開發(fā)者工具,可以利用上面介紹的命令行方法打開微信開發(fā)者工具。
/Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli -o port=$(cat "/Users/zyy/Library/Application Support/微信web開發(fā)者工具/Default/.ide") echo "微信開發(fā)者工具運行在${port}端口"
這樣就可以拿到微信開發(fā)者工具運行的端口號了,其中,/Users/zyy/ 為用戶目錄。
1、打開開發(fā)者工具:
# 打開工具 http://127.0.0.1:端口號/open # 打開/刷新項目 http://127.0.0.1:端口號/open?projectpath=項目全路徑
2、登錄:
# 登錄,返回圖片格式的二維碼 http://127.0.0.1:端口號/login # 登錄,取 base64 格式二維碼 http://127.0.0.1:端口號/login?format=base64 # 登錄,取 base64 格式二維碼,并寫入 /Users/username/logincode.txt http://127.0.0.1:端口號/login?format=base64&qroutput=%2FUsers%2Fusername%2Flogincode.txt
3、預(yù)覽:
# 預(yù)覽路徑為 /Users/username/demo 的項目,返回圖片格式的二維碼 http://127.0.0.1:端口號/preview?projectpath=%2FUsers%2Fusername%2Fdemo # 預(yù)覽路徑為 /Users/username/demo 的項目,返回 base64 格式的二維碼 http://127.0.0.1:端口號/preview?projectpath=%2FUsers%2Fusername%2Fdemo&format=base64 # 預(yù)覽路徑為 /Users/username/demo 的項目,返回 base64 格式的二維碼,并寫入 /Users/username/logincode.txt http://127.0.0.1:端口號/preview?projectpath=%2FUsers%2Fusername%2Fdemo&format=base64&qroutput=%2FUsers%2Fusername%2Flogincode.txt # 預(yù)覽路徑為 /Users/username/demo 的項目,返回圖片格式的二維碼,并將預(yù)覽信息輸出至 /Users/username/info.json http://127.0.0.1:端口號/preview?projectpath=%2FUsers%2Fusername%2Fdemo&infooutput=%2Users%2username%2info.json
更多 API 可以參考 HTTP 調(diào)用 。
方案微信開發(fā)者工具目前只有 macOS 和 Windows 兩種版本,這限制了服務(wù)器的系統(tǒng)。下面以 macOS 為例,
來介紹具體的實現(xiàn)過程:
The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.
作為領(lǐng)先的開源自動化服務(wù)器,Jenkins提供數(shù)百個插件來支持構(gòu)建,部署和自動化任何項目。
Jenkins 依賴于 Java 運行環(huán)境,所以需要在機器上安裝 Java。安裝 Jenkins 方式很多,可以在官網(wǎng)直接下載最新的軟件包,然后執(zhí)行下面的命令啟動 Jenkins 。
java -jar jenkins.war --httpPort=8888
其中,--httpPort=8888 為設(shè)置服務(wù)端口號,默認(rèn)端口號為 8080 。
新建任務(wù)選擇 “構(gòu)建一個自由風(fēng)格的軟件項目” ,在輸入任務(wù)名稱之后,點擊確定按鈕,進入到任務(wù)配置頁面。
任務(wù)配置在介紹任務(wù)配置之前,先來看一下最終要實現(xiàn)的功能。
主要的功能點如下:
使用 git 來管理代碼,可以選擇分支
打包版本(開發(fā)版/體驗版)可以選擇(注意:這里的「開發(fā)版」對應(yīng)「預(yù)覽」,體驗版對應(yīng)「上傳」)
1、源碼管理在任務(wù)配置頁面的第二項 “源碼管理” 中,選擇 git 方式管理代碼。填入 git 倉庫地址及訪問的賬戶,上圖中的 $branch 是自定義的構(gòu)建參數(shù),下面來看一下構(gòu)建參數(shù)的定義。
2、構(gòu)建參數(shù)在任務(wù)配置頁面的第二項 “General” 中,選擇 “參數(shù)化構(gòu)建過程”,進入構(gòu)建參數(shù)配置頁面。
參數(shù)有上述的幾種類型供選擇,可以參考下圖進行配置,這里不再贅述。
需要注意的是,這里的 name 可以通過 $name 的形式獲取到,例如上面提到的 $branch 。
構(gòu)建在任務(wù)配置頁面的 “構(gòu)建” 中,選擇 “執(zhí)行 shell” 方式來進行構(gòu)建。
Tips:這里的 shell 腳本是微信小程序集成 Jenkins 最核心的內(nèi)容。
回顧一下,本文最開始提到的微信小程序發(fā)布流程圖:
這一系列的操作使用 shell 腳本來完成,如何實現(xiàn)呢?
登錄微信開發(fā)者工具的登錄需要在微信端掃碼確認(rèn),這一步微信并沒有提供賬號密碼的登錄方式。不過,微信開發(fā)者工具是可以保持登錄態(tài)的。由于微信限制,一個開發(fā)者身份只能在一個終端登錄,所以我們申請了一個新的微信賬號「前端小姐姐」用于在 Jenkins 機器上登錄。
項目基礎(chǔ)設(shè)置在圖形化界面中,上傳代碼時,會在開發(fā)者工具中填入 AppID 、項目路徑等信息,也會在「詳情」中選擇項目的基本設(shè)置,比如「ES6 轉(zhuǎn) ES5」。微信還提供了一種配置方法,在項目根目錄使用 project.config.json 文件。這里通過一段 node 腳本,生成 project.config.json 文件。
const fs = require("fs") const content = "{"description":"項目配置文件。","setting":{"urlCheck":false,"es6":true,"postcss":true,"minified":true,"newFeature":true},"miniprogramRoot":"./","compileType":"miniprogram","appid":"***","projectname":"wechat-app","condition":{"search":{"current":-1,"list":[]},"conversation":{"current":-1,"list":[]},"plugin":{"current":-1,"list":[]},"game":{"currentL":-1,"list":[]},"miniprogram":{"current":-1,"list":[]}}}" fs.writeFileSync("./dist/project.config.json", content, "utf-8")
這樣就完成了項目的基礎(chǔ)設(shè)置,接下來將介紹如何通過 shell 腳本完成上傳。
shell 腳本echo ------------------------------------------------------- echo GIT_BRANCH: ${GIT_BRANCH} echo ------------------------------------------------------- # 執(zhí)行項目構(gòu)建 npm i --registry=http://registry.npm.taobao.org npm run build # 打開微信開發(fā)者工具 /Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli -o port=$(cat "/Users/devops/Library/Application Support/微信web開發(fā)者工具/Default/.ide") echo "微信開發(fā)者工具運行在${port}端口" return_code=$(curl -sL -w %{http_code} http://127.0.0.1:${port}/open) if [ $return_code == 200 ] then echo "返回狀態(tài)碼200,devtool啟動成功!" else echo "返回狀態(tài)碼${return_code},devtool啟動失敗" exit 1 fi if [ "$build_type" == "dev" ] then echo "發(fā)布開發(fā)版!" wget -O $BUILD_ID.png http://127.0.0.1:${port}/preview?projectpath=/Users/Shared/Jenkins/Home/workspace/fe-wechat-app/dist echo "預(yù)覽成功!請掃描二維碼進入開發(fā)版!" elif [ "$build_type" == "prod" ] then echo "準(zhǔn)備上傳!" /Applications/wechatwebdevtools.app/Contents/Resources/app.nw/bin/cli -u 1.0.0@/Users/Shared/Jenkins/Home/workspace/fe-wechat-app/dist --upload-desc "initial release" echo "上傳成功!請到微信小程序后臺設(shè)置體驗版并提交審核!" fi
因為本項目需要編譯代碼,所以服務(wù)器上需要安裝 node 和 npm。npm run build 命令不光在編譯代碼,而且還執(zhí)行了前面介紹的生成 project.config.json 的 node 腳本。
開發(fā)版上傳成功后,將二維碼圖片保存下來,用于構(gòu)建后顯示二維碼和發(fā)送郵件。
這里結(jié)合命令行調(diào)用和 HTTP 調(diào)用兩種方式來完成上傳,主要出于以下原因:
HTTP 調(diào)用可以很方便的下載生成的二維碼圖片
HTTP 服務(wù)只有在微信開發(fā)者工具啟動之后,才會啟動,所以需要通過命令行調(diào)用方式,來啟動微信開發(fā)者工具
構(gòu)建后使用 description setter plugin 插件來實現(xiàn),構(gòu)建完成后顯示二維碼圖片。
安裝插件回到 Jenkins 主頁,在「系統(tǒng)管理」中,進入到「插件管理」頁面,搜索 description setter plugin 并安裝。
安裝好插件后,返回任務(wù)配置頁面。在「構(gòu)建后操作」中,增加「Set build description」步驟,如下圖:
這里采用 HTML 二維碼${BUILD_ID}
按照上面的方式配置后,發(fā)現(xiàn)圖片并沒有顯示出來,而是顯示了文本信息。這是由于 Jenkins 出于安全的限制,所有描述信息的 Markup Formatter 默認(rèn)都采用 Plain text 的模式。
在「系統(tǒng)管理」-> 「全局安全配置」中,將 Markup Formatter 由 Plain text (純文本) 更改為 Safe HTML 即可。
按照上面的步驟操作后,就可以顯示出開發(fā)版二維碼。因為 Jenkins 構(gòu)建時,均使用「前端小姐姐」微信賬號,所以小程序開發(fā)助手上「前端小姐姐」發(fā)布的開發(fā)版不確定是哪位同學(xué)構(gòu)建的,故需要使用 Jenkins 平臺生成的二維碼,并注意二維碼有效期(有效期25分鐘)。
總結(jié)本文以微信小程序常規(guī)的發(fā)布流程為切入點,循序漸進地介紹了如何集成 Jenkins 實現(xiàn)微信小程序預(yù)覽、上傳功能。后臺、測試同事可以在該平臺上選擇分支獲取開發(fā)版用于聯(lián)調(diào)、測試,解決了本文開篇提及的問題。
由于本文篇幅有限,只是介紹了該平臺的一些基本功能,如果有其他的需求,可以參考文末的拓展鏈接解決。此外,文中若有任何表述不清或不當(dāng)?shù)牡胤?,歡迎大家批評指正~
拓展鏈接:
持續(xù)集成是什么?(阮一峰)
Jenkins User Documentation
微信公眾平臺|小程序|項目配置文件
微信公眾平臺|小程序|命令行調(diào)用
微信公眾平臺|小程序|HTTP 調(diào)用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97308.html
摘要:有如下特點支持和雙平臺調(diào)用自動識別安裝微信開發(fā)者工具位置常見問題命令執(zhí)行成功,但是沒有看到對應(yīng)版本檢查微信開發(fā)者工具登錄狀態(tài)是否失效微信開放平臺中是否設(shè)置體驗版本文同步發(fā)表博客微信小程序的發(fā)布構(gòu)建 環(huán)境準(zhǔn)備 微信開發(fā)者工具只支持macOS和Windows平臺,所以jenkins也只能運行在這兩個環(huán)境中?,F(xiàn)在假設(shè)我們已經(jīng)安裝了jenkins,并且配置好了任務(wù),大家可以參考微信小程序集成 ...
摘要:第篇安裝持續(xù)集成工具一大致介紹的作用相信大家也耳熟能詳了,為開發(fā)過程的持續(xù)交付提供了莫大的幫助本章節(jié)我們就嘗試著自己安裝一套持續(xù)集成工具,建立一套持續(xù)交付的平臺工具注意下面的字符串,請大家換成你們自己的宿主機地址即可二安裝步驟下載進入官網(wǎng) SpringCloud(第 056 篇)CentOS7 安裝 jenkins 持續(xù)集成工具 - 一、大致介紹 1、jenkins 的作用相信大家也耳...
摘要:微信小程序即將推出,還沒推出就火的不行了。基于微信這個巨大平臺,小程序必然能有巨大成功。如果我們自己想實現(xiàn)一個基于自己的包含類似微信的小程序功能,該如何實現(xiàn)了我們先來看看小程序的技術(shù)特點。 微信小程序即將推出,還沒推出就火的不行了。基于微信這個巨大平臺,小程序必然能有巨大成功。不過它并不能完全取代App,該開發(fā)App還得開發(fā)。如果我們自己想實現(xiàn)一個基于自己的APP包含類似微信的小程序功...
閱讀 1265·2021-11-19 09:40
閱讀 3121·2021-11-02 14:47
閱讀 3080·2021-10-11 10:58
閱讀 3221·2019-08-30 15:54
閱讀 2674·2019-08-30 12:50
閱讀 1728·2019-08-29 16:54
閱讀 468·2019-08-29 15:38
閱讀 1241·2019-08-29 15:19