app
開發和測試過程當中咱們都會執行npm start
命令來啓動服務,只是這樣仍是很繁瑣,咱們須要人工介入才能發佈代碼,本篇文章的目的就是介紹如何使用jenkins
讓咱們的項目自動化。react
原理是打包bundle
,而後把文件放到服務器上。android
react-native
打包文件結果包含bundle
文件和圖片資源文件。ios
若是app
加載本地bundle
或者鏈接本地開發服務,圖片資源是能夠正常訪問的,可是若是訪問的是多級目錄地址,例如http://www.xxx.com/awe/bundle.js
,圖片的地址只會從域名http://www.xxx.com
查找,最終致使圖片沒法顯示。shell
這是由於Image
組件加載邏輯不支持多級目錄,感興趣能夠查看React Native 圖片資源那些事瞭解詳情。npm
解決方案是Image/resolveAssetSource
提供的setCustomSourceTransformer
,它可讓咱們決定圖片的處理邏輯。小程序
咱們把serverUrl
替換爲jsbundleUrl
,這樣圖片就會從bundle
同級查找到圖片。segmentfault
若是有其餘需求,能夠參閱react-native/Libraries/Image/resolveAssetSource
中相關代碼,自行設置setCustomSourceTransformer
。微信小程序
import React from 'react'; import { AppRegistry, Platform } from 'react-native'; import { setCustomSourceTransformer } from 'react-native/Libraries/Image/resolveAssetSource'; import Entry from './src/entry'; if (process.env.NODE_ENV_REAL === "test") { // 定製資源的獲取方式 // 由域名根目錄調整爲bundle所在目錄 // 安卓使用drawable格式 setCustomSourceTransformer((resolver) => { resolver.serverUrl = resolver.jsbundleUrl; if (Platform.OS === "android") { return resolver.drawableFolderInBundle(); } return resolver.defaultAsset(); }); } AppRegistry.registerComponent('awe', () => Entry);
點擊"新建任務"開始填寫任務信息,輸入任務名稱並選擇"構建一個自由風格的軟件項目"。react-native
"源碼管理"中配置項目代碼,以Git
爲例,須要配置兩個參數:緩存
$branch
,指定爲自定義構建參數在"General"中勾選"參數化構建過程",而後點擊"添加參數",在候選列表中選擇Git Parameter
,配置如下兩項:
Name
: 可訪問到的變量名稱,如配置爲branch後能夠經過$branch拿到值Parameter Type
:選擇Branch,也能夠根據狀況配置其餘選項這樣在前面"源碼管理"中配置的$branch
就能夠訪問到倉庫的全部分支。
以及一個選項參數:env
(指定目標環境)。候選數據一行一條記錄輸入便可。
在"構建"中點擊"增長構建步驟"按鈕,在候選列表中選擇"執行 shell"。
下面是一段簡單判斷env
執行不一樣腳本的代碼:
#!/bin/bash echo ------------------------------------------------------- echo 環境: ${env} echo ------------------------------------------------------- # 準備工做 yarn install if [ "$env" == "dev" ] then yarn run bundle-android yarn run bundle-ios elif [ "$env" == "prod" ] then yarn run prod-android yarn run prod-ios fi
最後你們把生成的bundle
文件連同資源文件部署到服務器,app
中填寫對應的地址。
另外須要注意:
react-native bundle
存在緩存問題,使用--reset-cache
參數清除至此咱們能夠安心經過jenkins
來發布,其實一開始就有這樣作的想法,不過一直遲遲未動,現在總算是實踐完成並寫了這篇文章。
算上我前面發佈的微信小程序和Jenkins不得不說的二三事,這已是第二篇關於jenkins
自動化的文章,有機會我會再寫相關實踐。
本文同步發表於做者博客: React Native 和 Jenkins 不得不說的二三事