使用 App Center 和 CodePush 成為 React Native DevOps 開發(fā)人員
目錄
1. 為什么選擇移動 DevOps?
2. 自動化您的移動應(yīng)用程序開發(fā)生命周期
3. 使用 CodePush 實時更新您的應(yīng)用
為什么選擇移動 DevOps?
與其他平臺不同,移動是一個獨特的環(huán)境,需要對開發(fā)生命周期有全面的了解。
在 CI/CD 之前,移動開發(fā)人員必須處理許多繁瑣的工作才能將應(yīng)用交付給用戶設(shè)備。因此,采用移動 DevOps 流程是移動開發(fā)領(lǐng)域的游戲規(guī)則改變者。它允許所有團隊在盡可能短的時間內(nèi)執(zhí)行分配的任務(wù),從而確保平穩(wěn)運行。
本文重點介紹如何使用 App Center 和 CodePush 設(shè)置 CI/CD 流程,將其集成到 React Native Android 應(yīng)用程序中,以自動化每個構(gòu)建、測試和分發(fā)流程。
? 閱讀更多: 移動應(yīng)用程序開發(fā)
自動化您的移動應(yīng)用程序開發(fā)生命周期
在以下位置注冊 App Center 帳戶 應(yīng)用中心.ms
添加您的移動應(yīng)用程序。在本文中,我使用React Native在 Android 操作系統(tǒng)上部署移動應(yīng)用程序。
選擇左側(cè)菜單中的構(gòu)建部分,然后選擇您的存儲庫服務(wù)。
成功將 App Center 鏈接到您的項目倉庫后,它將在此處顯示您的倉庫的分支。您可以為每個分支選擇和配置構(gòu)建。
您可以配置許多有用的任務(wù),例如:
皮棉源代碼
運行單元測試
運行自定義構(gòu)建腳本
在真實設(shè)備上測試
自動化應(yīng)用程序的構(gòu)建過程后,您需要使用密鑰庫對其進(jìn)行簽名,以便將構(gòu)建版本分發(fā)給測試人員和用戶
App Center 支持為 Android 應(yīng)用程序設(shè)置代碼簽名的三種不同配置。首先,在分支配置中啟用Sign builds開關(guān)。在此處關(guān)注并閱讀完整文檔:
最后,嘗試向你的 repo 推送一個新的提交,App Center 將運行測試并根據(jù)你的配置構(gòu)建一個新版本,然后它會通知你的用戶下載你的應(yīng)用程序的新創(chuàng)建版本。
使用 CodePush 實時更新您的應(yīng)用
代碼推送是一種云服務(wù),使 React Native 開發(fā)人員能夠?qū)⒁苿討?yīng)用程序更新直接部署到用戶的設(shè)備上。
這允許您在解決錯誤和/或添加不需要您重新構(gòu)建二進(jìn)制文件并通過相應(yīng)應(yīng)用程序商店重新分發(fā)它的小功能時,與您的用戶群建立更確定和直接的互動模型。
簡而言之,CodePush 通過以下方案幫助您將 React Native 應(yīng)用程序的實時更新交付給用戶:
開發(fā)人員對 Javascript 代碼進(jìn)行了一些更改。
執(zhí)行 CodePush CLI 將新的更新推送到 App Center(CodePush 將您應(yīng)用的每個 JS bundle 文件存儲在 App Center 上)。
根據(jù)您的 CodePush 配置,您的應(yīng)用程序?qū)⑼ㄟ^更新對話框提示用戶或靜默下載新的 JS 包文件并替換舊文件,從而為您的應(yīng)用程序提供全新更新。
如果您不小心推送了包含崩潰的更新,它可以回滾以確保您的最終用戶始終擁有您的應(yīng)用程序的功能版本。
CodePush 顯著減少了許多重復(fù)性任務(wù),例如:
開發(fā)人員無需重建任何 ipa、apk 或 aab 文件。
開發(fā)人員無需將新版本上傳或重新分發(fā)到商店。
用戶無需從商店手動下載新版本。相反,他們會即時收到新的更新。
要設(shè)置 CodePush,請打開 App Center 并按照以下說明操作:
我強烈建議你閱讀完整文檔在這里,或克隆示例代碼.
在本文中,我重點討論了將 CodePush 集成到我的 React Native Android 應(yīng)用程序中時遇到的一些令人沮喪的問題。
如果您的應(yīng)用因此異常而崩潰:
java.lang.IllegalStateException:本地模塊 CodePush 試圖覆蓋 CodePushNativeModule。檢查MainApplication.java中的getPackages () 方法,可能是該模塊被創(chuàng)建了兩次。如果這是您的意圖,請設(shè)置 canOverrideExistingModule=true
→ 通過在項目的根目錄下創(chuàng)建一個 包含以下內(nèi)容的react-native.config.js文件來解決:
模塊.exports = {
依賴項:{
“反應(yīng)本機代碼推送”:{
平臺:{
機器人:空
}
}
}};
后續(xù)GitHub問題:#1666
無法同步新更新
調(diào)用 CodePush.sync時,您的應(yīng)用程序沒有更新,您在回調(diào)中收到的狀態(tài)是 CodePush.SyncStatus.UNKNOWN_ERROR。
如果您看到此錯誤,請嘗試檢查 Android Studio Logcat:
更新無效——在下載的內(nèi)容中找不到名為“null”的JS 包文件。請檢查您發(fā)布的 CodePush 更新是否使用與您的應(yīng)用程序二進(jìn)制文件一起提供的完全相同的JS 包文件名。
→ 通過覆蓋ReactNativeHost的getJSBundleFile方法來解決:
完成配置后,按照這個CLI 文檔關(guān)于如何將新更新推送到登臺或生產(chǎn)。