自動化一直是咱們前端工程化的一個重要方向,前端工程從構建到部署,以自動化腳本執行替代人工操做,不只能更好地減小中間流程出現的誤操做,還能使得開發從重複性的勞動中解放出來; html
小程序開發受限於平臺的開發工具,咱們在開發的過程當中,編譯以及部署(上傳代碼)小程序代碼,都須要經過可視化的開發工具,因此H5開發中使用的持續部署流程,並不適用於小程序開發流程;這就使得咱們在開發小程序的過程當中,構建和發佈代碼到測試和線上環境,每每須要經過開發的手動操做,萬一出現手工誤操做,就會阻斷測試流程或者出現生產事故了;設想一下如下場景:前端
在這個過程當中,構建和部署代碼的重複性勞動,大大下降了開發的效率;解決這個痛點,將能提高效率;node
咱們知道,H5持續發佈的大體流程能夠是由Jenkins
觸發構建腳本,構建腳本運行生成目標代碼的dist
文件夾,再經過腳本將dist
文件夾上傳至部署的服務器目錄中(此處簡化描述了,實際流程可能會更加複雜);這裏注意到了構建和上傳的動做都是由腳本執行的,而通常的腳本會使用bash來實現:git
git clone xxx git checkout target_branch npm install npm run build tar dist
執行完腳本後,由Jenkins經過ssh將文件上傳到部署的服務器目錄中;web
那麼問題來了,小程序的持續發佈是否能夠參照呢?這裏須要解決的是小程序的構建和上傳是否也能實現相關的腳本;
答案是能夠的,微信小程序開發工具在新的版本中,推出了命令行調用
和http調用
兩種方式,使得構建和上傳的流程不在拘泥於開發工具的可視化界面;這也意味着,咱們也能夠編寫bash腳本,在Jenkins中自動化執行這些流程; shell
好,如今就一塊兒來實踐一下!express
在新版本的微信開發者工具中,提供了命令行調用和http調用兩種方式進行登陸、預覽、上傳等操做,具體使用方式能夠直接參照官方文檔;npm
須要注意的是,這兩種調用都須要先在微信開發工具的
設置 > 通用設置 > 安全
中開啓服務端口。
兩者有什麼區別呢:小程序
命令行調用
的方式,容許在當前機器上,經過命令行工具或者shell
腳本對微信小程序開發工具中的命令進行調用;http調用
的方式,容許在當前機器上,經過http請求的方式調用微信小程序開發工具;該方式是否支持跨機器調用,還須要進一步研究,這裏先不討論;
本文中將使用
命令行調用
去實現小程序的自動化部署。
在使用Jenkins構建部署上,存在多種方式;你能夠直接在你的Jenkins服務器的機器上完成部署,可是因爲小程序的命令行和http調用
只提供Mac
和Windows
兩種方式,因此這就意味着Jenkins服務也須要在對應的操做系統上;不過,Jenkins的服務也有可能會部署在Linux
系統上,而Linux
上不支持小程序的命令行和http調用
,所以,在這種狀況下,就有必要將Jenkins服務和小程序的構建服務進行分離。微信小程序
正好,Jenkins支持Master/Slave
模式,在這種模式下,Jenkins服務能夠部署在Linux
服務器上,做爲Master機器;而小程序的構建機器能夠做爲Jenkins服務器的Slave節點,專門運行由Master機器觸發的小程序構建任務;
這裏選擇一臺Mac
機器做爲小程序的構建機器,將這臺機器配置爲Slave節點時,須要在Jenkins按照以下步驟配置:
Manage Jenkins > Manage Nodes and Clouds
中選擇新建節點;Permanant Agent
,而後開始配置節點信息;遠程工做目錄
是指在Mac上運行jenkins的工做目錄,須要本身手動建立一個目錄,這樣後面git拉到的代碼會自動放到該目錄下,這裏必定要注意權限,文件目錄設爲可讀可寫,要否則後面jenkins啓動時候會遇到權限問題;用法
選擇Only build jobs with label expressions matching this node
,確保只有Jenkins任務中聲明的Label匹配,才能使用該Slave節點;啓動方式
選擇Launch agents via SSH
,Credentials配置時,按照Slave機器的用戶名和密碼填寫便可;Mac
機器上,建立對應的遠程工做目錄
,不然會構建時會提示找不到對應目錄;Mac
機器上的遠程登陸權限,不然沒法經過SSH
進行鏈接;mac_node
,但此時,節點會處於未鏈接
的狀態,須要打開節點,再選擇Launch agent
進行啓動;命令行調用
中的命令須要接收多個參數,例如upload
命令就須要傳遞項目地址、版本號、備註等的參數,這些參數有一些會根據需求而改變,例如版本號可能每次都會變化;可是原始的Jenkins容許接收的參數有限,因此爲了拓展參數,這裏使用提早安裝Extended Choice Parameter Plug-In
和Git Parameter Plug-In
用來拓展構建參數以及Git分支參數;
Freestyle Project
,配置String Parameter
:appId參數、版本號、描述;Git Parameter
插件提供分支選擇;Credentials
;mac_node
節點;mac_node
主機的環境參數,在Manage Jenkins > Manage Nodes and Clouds
中選擇對應的主機節點,在配置中,設置環境參數,鍵
爲PATH
,值
能夠從主機中經過echo $PATH
命令查看;Jenkins
任務中的Execute shell
填寫shell
腳本;因爲本文將使用命令行調用
去實現小程序的自動化部署,下面將實現對應的shell
腳本:
git checkout ${BRANCH} npm i alias mpcli='/Applications/wechatwebdevtools.app/Contents/MacOS/cli' mpcli open npm run build:weapp mpcli upload --project ${WORKSPACE}/dist -v ${VERSION} -d ${DESC}
注意,須要先登陸開發者工具
大體流程爲:
alias
,縮短命令長度;open
命令,確保小程序開發工具已經打開;dist
目錄代碼;下面就看看執行的效果:
Build with Parameters
,填寫必須的參數:本篇文章主要分享了關於在小程序構建流程中的一個痛點,而且經過Jenkins
和小程序開發工具的命令行調用
去解決在開發流程上的問題,實現構建流程的自動化;文章中不只有腳本的實現
,並且還有Jenkins
的配置,思路會比較簡單的,在實際應用中,能夠結合具體應用場景,再進行改造,這裏先拋磚引玉
;最後但願文章能對你們有啓發,同時也歡迎你們討論指正!