React-native Android 在Jenkins上配置自動打包方案
- 使用jenkins來實現自動化構建,可以簡化開發測試的流程,原來debug包都不會做混淆,現在用了jenkins會自動的打混淆包,除了環境不一樣,其他配置debug和release包都一樣,這樣就可以避免程式碼混淆帶來的問題,早日發現早日治療。推薦大家在廢棄的電腦上搭建一個Jenkins。具體的搭建流程見這裡
這裡介紹一下我在專案中使用了React-native之後的jenkins配置,預設已經在jenkins上已經搭建好了普通Android的打包環境,如果想打帶有React-native的apk,首先在React官方的Generating Signed APK中有bundle命令來生成index.android.bundle
$ react-native bundle --platform android --dev false --entry-file index.android.js \
--bundle-output android/app/src/main/assets/index.android.bundle \
--assets-dest android/app/src/main/res/
所以我們在Android打包之前首先要執行這個命令,明確了這個區別,就開始動手了。
首先在jenkins伺服器上升級buildToolsVersion,compileSdkVersion 到23
如果下載慢,建議換成sdk.gdgshanghai.com的映象
接下來在伺服器上搭建react-native環境
注意一點,很多同學搭建換成後,執行
react-native init AwesomeProject
會發現卡了半天還是沒有成功,這個時候建議你使用
npm config set registry=https://registry.npm.taobao.org
將npm的源換成淘寶映象
- 測試環境安裝成功之後,開始配置我們的Jenkins
我們是通過jenkins Invoke Gradle script執行assembleQa –stacktrace task來打包的,
如果我們希望在執行這個task之前讓React-native 生成index.android.bundle,那麼我們可以在build.gradle寫這樣的task,但是這裡我介紹一個更簡單的方式,在jenkins中增加構建步驟->windows系統選擇Execute windows batch command ||mac系統選擇Excute shell
關鍵的步驟來了!!!!!
我們按住Execute shell的右上角,將它拖動到 Invoke Gradle script的前面,這樣就可以先執行Execute shell中的命令
- 接下來開始寫Execute shell中的命令
react-native bundle --platform android --dev false --entry-file react-native/index.android.js \
--bundle-output app/src/main/assets/index.android.bundle \
--assets-dest app/src/main/res/
測試一下,失敗,報react-native: command not found
google一下,React-native jenkins,發現沒有任何相關的記錄,菊花一緊,每當Stack Overflow上國外友人還沒有踩過坑的時候,我就有一種使命感,難道我已經走在了全世界碼農的前面?難道我就要這樣走向人生顛覆了麼,這樣的幻覺讓我像瘋狗一樣查資料誓要把這個問題解決,給全世界人民帶來福利。
打了一針雞血,發現jenkins的shell命令是跑在自己的Shell中的,這意味著什麼?需要我們指定絕對路徑,好吧,更換一成絕對路徑。
which react-native
獲取react-native的絕對路徑,檔案路徑也一併換掉,整個命令變成了
/usr/local/bin/react-native bundle --platform android -dev false --entry-file /Users/jenkins/.jenkins/jobs/testAndroid-qa/workspace/react-native/index.android.js \
--bundle-output /Users/jenkins/.jenkins/jobs/testAndroid-qa/workspace/app/src/main/assets/index.android.bundle \
--assets-dest /Users/jenkins/.jenkins/jobs/testAndroid-qa/workspace/app/src/main/res/
再來構建->成功。
看一下我的構建歷史
不斷的失敗,
不斷的解決,
我為全世界人民踩坑,
我為全世界人民探路,
我活在自我陶醉的程式設計師世界。