微信小程序自動(dòng)化部署

前言

我們先來梳理一下日常開發(fā)微信小程序的流程:代碼開發(fā)完之后我們首先要提交到代碼倉庫谆棱,然后使用微信開發(fā)者工具運(yùn)行代碼铅协,接著通過開發(fā)者工具上傳代碼到微信小程序后臺(tái)入宦,最后在后臺(tái)提交審核仰税。
不難看出流程還是比較繁瑣的缺虐,自動(dòng)化部署流程可以幫助我們縮減這個(gè)流程枉圃,做到解放解放碼農(nóng)的雙手功茴,具體如何實(shí)現(xiàn),我們往下看孽亲。

miniprogram-ci

微信小程序的自動(dòng)化部署流程必須依賴 miniprogram-ci坎穿,這個(gè)插件。
miniprogram-ci 是從微信開發(fā)者工具中抽離的關(guān)于小程序/小游戲項(xiàng)目代碼的編譯模塊。
開發(fā)者可不打開小程序開發(fā)者工具玲昧,獨(dú)立使用 miniprogram-ci 進(jìn)行小程序代碼的上傳栖茉、預(yù)覽等操作。
因?yàn)槟_本的執(zhí)行依賴這個(gè)插件孵延,所以我們可以將這個(gè)插件安裝在要執(zhí)行腳本的服務(wù)器上吕漂,或者安裝在本地項(xiàng)目中。

npm install miniprogram-ci --save

微信公眾平臺(tái)配置

登錄公眾平臺(tái)尘应,打開 開發(fā)-開發(fā)管理-開發(fā)設(shè)置惶凝,找到 小程序代碼上傳 配置項(xiàng),生成小程序代碼上傳密鑰犬钢,并添加 ip 白名單苍鲜,密鑰文件可以存放在要執(zhí)行腳本的服務(wù)器上,或者保存在項(xiàng)目中娜饵,只要能讓腳本訪問到即可。


image.png

密鑰文件

微信公眾平臺(tái)生成的密鑰文件具體內(nèi)容如下:


image.png

腳本

編寫 xxx.sh 的執(zhí)行腳本官辈,命名隨意箱舞。

set -e

while read -r line
do
  if [[ $line =~ "version" ]]
  then
    declare a=${line##*:}
    declare b=${a#*\"}
    declare version=${b%\"*}
    break
  fi
done < package.json

echo $version

yarn

echo "開始編譯..."

start1=$(date +%s)
yarn build:mp-weixin
end1=$(date +%s)
take1=$(( end1 - start1 ))
echo "Compile Success:${take1}s"

echo "微信小程序上傳..."
start2=$(date +%s)

# upload
miniprogram-ci \
  upload \
  --pp ./dist/build/mp-weixin \
  --pkp ./private.wx3fxxxxxxxx3.key \
  --appid wx3fxxxxxxxx3 \
  --uv $version \
  --threads 1 \
  -r 1 \
  --enable-es6 true \
  --enable-es7 true \
  --enable-autoprefixwxss true \
  --enable-minify true \

end2=$(date +%s)
take2=$(( end2 - start2 ))

echo "Upload Success: ${take2}s"

take3=$(( end2 - start1 ))
echo "Total Time: ${take3}s"

腳本具體模塊講解

set -e

表示后續(xù)所有的 bash 命令的返回 code 如果不是 0,那么腳本立即退出拳亿,后續(xù)的腳本將不會(huì)得到執(zhí)行的機(jī)會(huì)晴股。說人話就是腳本執(zhí)行過程中,有報(bào)錯(cuò)立即退出停止執(zhí)行肺魁。

while read -r line
do
  if [[ $line =~ "version" ]]
  then
    declare a=${line##*:}
    declare b=${a#*\"}
    declare version=${b%\"*}
    break
  fi
done < package.json

echo $version

以上腳本是逐行讀取 package.json 文件內(nèi)容电湘,找到 version 字段,并獲取其對(duì)應(yīng)的值定義一個(gè) $version 變量鹅经。直白點(diǎn)講就是獲取項(xiàng)目的版本號(hào)寂呛,因?yàn)橄旅嬉谩?/p>

yarn

echo "開始編譯..."

start1=$(date +%s)
yarn build:mp-weixin
end1=$(date +%s)
take1=$(( end1 - start1 ))
echo "Compile Success:${take1}s"

echo "微信小程序上傳..."
start2=$(date +%s)

看到 yarn, 大家應(yīng)該都知道這段腳本就是安裝項(xiàng)目依賴瘾晃,并且打包編譯小程序項(xiàng)目贷痪,其中的 start1、end1蹦误、take1 這些是記錄時(shí)間的劫拢,可忽略。

# upload
miniprogram-ci \
  upload \
  --pp ./dist/build/mp-weixin \
  --pkp ./private.wx3fxxxxxxxx3.key \
  --appid wx3fxxxxxxxx3 \
  --uv $version \
  --threads 1 \
  -r 1 \
  --enable-es6 true \
  --enable-es7 true \
  --enable-autoprefixwxss true \
  --enable-minify true \

以上這段腳本就是核心了强胰。
通過腳本也不難看出舱沧,我們是通過 miniprogram-ci 進(jìn)行代碼上傳的。
具體參數(shù)含義:

--pp:編譯打包產(chǎn)物文件路徑
--pkp:微信公眾平臺(tái)生產(chǎn)的那個(gè)私鑰文件路徑
--appid:小程序的 appid
--uv:項(xiàng)目的版本號(hào)
--threads:開啟線程數(shù)
-r:機(jī)器人編號(hào)(這個(gè)參數(shù)無所謂)

至此偶洋,整個(gè)腳本就基本完成了熟吏。

自動(dòng)化部署實(shí)現(xiàn)

主要三個(gè)核心部分:

  1. 上傳腳本
  2. miniprogram-ci 插件
  3. 密鑰文件

自動(dòng)化部署實(shí)現(xiàn)方式有很多種,本文主要講解兩種玄窝。

第一種方式(推薦)

jenkins + gitlab + webhook
將腳本分俯、密鑰文件直接放在項(xiàng)目根目錄肾筐,jenkins 安裝 webhook 相關(guān)插件,gitlab 配置 webhook缸剪,這樣就可以做到 master 分支代碼變動(dòng)就可以觸發(fā) webhook吗铐,進(jìn)而觸發(fā) jenkins 執(zhí)行,別忘了在 jenkins 服務(wù)器全局安裝 miniprogram-ci 插件杏节。
這樣我們就實(shí)現(xiàn)了唬渗,當(dāng)業(yè)務(wù)需求開發(fā)完,代碼合并到 master 分支之后奋渔,自動(dòng)觸發(fā) webhook镊逝,進(jìn)而觸發(fā) jenkins 執(zhí)行上傳腳本。
我們開發(fā)人員需要做的就只是合并代碼到 master 分支嫉鲸,然后到小程序后臺(tái)選擇上傳的版本提交審核即可撑蒜。
nice~

第二種方式

基于本地終端執(zhí)行,將腳本玄渗、密鑰文件直接放在項(xiàng)目根目錄座菠,本地安裝 miniprogram-ci 插件,直接在終端中執(zhí)行腳本即可藤树。

./ci-xxx.sh

下圖就是自動(dòng)化部署上傳的版本:


image.png

總結(jié)

以上就是小程序自動(dòng)化部署的具體實(shí)現(xiàn)過程浴滴,希望能為迷茫的小伙伴帶來一點(diǎn)幫助。自動(dòng)化部署還有一些功能也可以實(shí)現(xiàn)岁钓,本文篇幅有限升略,沒有做全部介紹,感興趣的小伙伴可以自行探索屡限。

作者:大熊Sir
鏈接:https://juejin.cn/post/7124960511237554189
來源:稀土掘金
著作權(quán)歸作者所有品嚣。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處钧大。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腰根,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拓型,更是在濱河造成了極大的恐慌额嘿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劣挫,死亡現(xiàn)場(chǎng)離奇詭異册养,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)压固,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門球拦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事坎炼±颍” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵谣光,是天一觀的道長檩淋。 經(jīng)常有香客問我,道長萄金,這世上最難降的妖魔是什么蟀悦? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮氧敢,結(jié)果婚禮上日戈,老公的妹妹穿的比我還像新娘。我一直安慰自己孙乖,他們只是感情好浙炼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唯袄,像睡著了一般弯屈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上越妈,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天季俩,我揣著相機(jī)與錄音钮糖,去河邊找鬼梅掠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛店归,可吹牛的內(nèi)容都是我干的阎抒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼消痛,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼且叁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秩伞,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤逞带,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纱新,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體展氓,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年脸爱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遇汞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖空入,靈堂內(nèi)的尸體忽然破棺而出络它,到底是詐尸還是另有隱情,我是刑警寧澤歪赢,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布化戳,位于F島的核電站,受9級(jí)特大地震影響轨淌,放射性物質(zhì)發(fā)生泄漏迂烁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一递鹉、第九天 我趴在偏房一處隱蔽的房頂上張望盟步。 院中可真熱鬧,春花似錦躏结、人聲如沸却盘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黄橘。三九已至,卻和暖如春屈溉,著一層夾襖步出監(jiān)牢的瞬間塞关,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工子巾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帆赢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓线梗,卻偏偏與公主長得像椰于,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仪搔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容