1. 程式人生 > >React Native專案自動化打包釋出

React Native專案自動化打包釋出

今天這篇文章的目的是在rn專案的構建,並不會涉及到rn框架或者使用的講解,說起構建,特別是前端構建大家應該很快會想到webpack、Grunt、 Gulp等。而這些工具在rn專案中就顯得有些雞肋。所以在此給大家分享一下不使用構建工具實現rn專案自動化打包釋出的思路。

涉及到的工具
相關概念

1.GitLab CI是 GitLab 提供的持續整合服務,只要在你的倉庫根目錄 建立一個.gitlab-ci.yml 檔案, 併為該專案指派一個Runner,當有合併請求或者 push的時候就會觸發build。 這個.gitlab-ci.yml 檔案定義GitLab runner要做哪些操作。 預設有3個[stages(階段)]: build、test、deploy。 更詳細的可以檢視官方文件

2.GitLab-Runner是配合GitLab-CI進行使用的。一般地,GitLab裡面的每一個工程都會定義一個屬於這個工程的軟體整合指令碼,用來自動化地完成一些軟體整合工作。當這個工程的倉庫程式碼發生變動時,比如有人push了程式碼,GitLab就會將這個變動通知GitLab-CI。這時GitLab-CI會找出與這個工程相關聯的Runner,並通知這些Runner把程式碼更新到本地並執行預定義好的執行指令碼。

所以,GitLab-Runner就是一個用來執行軟體整合指令碼的東西。你可以想象一下:Runner就像一個個的工人,而GitLab-CI就是這些工人的一個管理中心,所有工人都要在GitLab-CI裡面登記註冊,並且表明自己是為哪個工程服務的。當相應的工程發生變化時,GitLab-CI就會通知相應的工人執行軟體整合指令碼。如下圖所示:

1171685-20170629165716758-915731937-2.png

3.Pipelines是定義於.gitlab-ci.yml中的不同階段的不同任務。 我把Pipelines理解為流水線,流水線包含有多個階段(stages),每個階段包含有一個或多個工序(jobs),比如先購料、組裝、測試、包裝再上線銷售,每一次push或者MR都要經過流水線之後才可以合格出廠。而.gitlab-ci.yml正是定義了這條流水線有哪些階段,每個階段要做什麼事

編寫gitlab—ci (以Android打包為例)
build_apk_release:
  stage: test
  when: manual
  variables:
    GIT_SUBMODULE_STRATEGY:
recursive environment: Development script: - zsh build.sh android Release "" artifacts: expire_in: 2 hrs paths: - K*.apk only: - /^master$|^branch\/*|^release\/*/ tags: - mac-shell cache: paths: - node_modules/
funBundle(){
    echo $1
    echo $2
    echo $3
    funWithInit

    case $1 in
    "iOS")
        funWithiOS $2
        ;;
    "android")
        funWithAndroid $2 $3
        ;;
     "apks")
        funWithAndroidApks
        ;;
        *)
        echo "not mismatchimg"
    esac

}
funBundle $1 $2 $3

找到對應的funWithAndroid程式碼

funWithAndroidApks(){

    apkClear
    for flavor in kuaibao huawei 360helper yingyongbao aliyun baidu xiaomi meizu uc jifeng sougou oppo vivo yiyonghui chuizi 91helper anzhi wandoujia mumayi yingyonghui anzhuo lianxiang huawei oppo vivo yiyonghui chuizi yiyou;
    do
        pushd android && ./gradlew "assemble${flavor}Release" && popd
    done
    gradle --stop

    cp  android/app/build/outputs/apk/apk/release/*.apk ~/Documents/Apks/
    gitClear
}
funWithAndroid(){

    apkClear
    assembleName="assemble$1$2"
    echo assembleName
    pushd android && ./gradlew --no-daemon ${assembleName} && popd
    cp -r android/app/build/outputs/apk/*.apk .
    assembleApk=`ls *.apk`

    if [ "$1"x = "Release"x ]; then
      pushApp ${assembleApk}
    fi
    gitClear

}
}

pushApp(){
  apiKey='cd61f47742ae6d****************'
  uKey='21607fc6a949acc****************'
  curl -F "[email protected]$1" -F "uKey=$uKey" -F "_api_key=$apiKey" https://www.pgyer.com/apiv1/****
}

指令碼程式碼很簡單,利用gradlew進行打包,通過最後一段程式碼上傳至蒲公英 這樣一個自動打包上傳指令碼編寫完成。ios可參照。

接下來我們來看看如何利用ci實現rn的熱更打包,自動上傳(這裡使用code-push來實現熱更,服務端是小編自己搭建的,後期可以分享給大家)
編寫gitlab—ci 實現打包入口
build_hot_fix_stag:
  stage: test
  when: manual
  script:
    - yarn config set registry https://registry.npm.taobao.org
    - yarn config set disturl https://npm.taobao.org/dist
    - yarn install
    - zsh autoppk.sh both Staging
  only:
    - /^master$|^branch\/*|^release\/*/
  tags:
    -  mac-shell
  cache:
    paths:
      - node_modules/

同樣還是找重點,script中進行了3個步驟(npm/yarn)

  1. 設定淘寶映象源
  2. 安裝依賴
  3. 執行autoppk.sh指令碼
#!/bin/bash
#read env
echo '正在準備釋出熱更新...'
bundle(){
    node packppk.js '****' $1 $2
}

clean(){
    echo 'delete react-native-packager-cache'
    rm -rf ./react-native-packager-cache-*
}

funBundle(){
    bundle $1 $2
}

funBundle $1 $2
#clean

packppk.js
var codepushReleaseReact = require('./release-react')
var updateConfig = require('./update')

function bundle() {
  console.log("玩命打包中 ......")

  const appName = process.argv[2] || 'app'
  const platform = process.argv[3] || 'both'
  const deploymentName = process.argv[4] || 'Staging'
  console.log('platform' + platform)
  console.log('deploymentName' + deploymentName)

  switch (platform) {
    case 'both':
      console.log('開始打包雙平臺')
      codepushReleaseReact({
        ...updateConfig.ios,
        deploymentName
      }, 'ios', appName)
      codepushReleaseReact({
        ...updateConfig.android,
        deploymentName
      }, 'android', appName)
      break
    default:
  }
}

bundle()
codepushReleaseReact
function reactNativeRelease (argv, platform, name) {
  return [
    "code-push",
    "release-react",
    appName(name, platform),
    platform,
    `-d "${argv.deploymentName}"`,
    `--des "${argv.description}"`,
    `--dev ${argv.development}`,
    `-m ${argv.mandatory}`,
    targetBinary(argv.targetBinary)
  ].join(" ")
}

至此rn熱更打包,自動上傳就已經完成了,相信瞭解過code-push的同學應該很容易理解指令碼的含義,在實際專案中寫完指令碼並不算真正的結束,我們要利用指令碼實現自動化,解放雙手

將我們寫好的指令碼部署到gitlab

說到指令碼的部署其實gitlab已經幫我們做好了,當我們在專案中建立gitlab-ci.yml時,部署工作就算完成,剩下的就是編寫具體的job,而我們編寫好的job具體實現就得靠文章一開始所提到的Runner。

當我們push專案,或者建立merge request的時候會觸發對應的CI pipeline,從而開始讓runner執行我們提前編寫好的job。

對於一個前端專案來說,自動化的構建是很有必要的,同時我們也可以通過gitlab實現更多的功能比如eslint/Flow程式碼檢測,單元測試等等。利用指令碼實現一些機械工作,提高工作效率。

另外這種思路同樣適用於其他專案vue、react等前端專案,Android、ios等移動端專案。區別只是在於如何利用各自的資源。

文章可能有很多不足的地方,希望大家指正,同時也希望大家可以多多交流,分享出更多的技術方案,謝謝~~

技術交流群:581621024 關注小編 公眾號:LearningTech 每日更新前端技術

qrcode_for_gh_4dda50fa73f6_430.jpg


相關推薦

React Native專案自動化打包釋出

今天這篇文章的目的是在rn專案的構建,並不會涉及到rn框架或者使用的講解,說起構建,特別是前端構建大家應該很快會想到webpack、Grunt、 Gulp等。而這些工具在rn專案中就顯得有些雞肋。所以在此給大家分享一下不使用構建工具實現rn專案自動化打包釋出的思路。涉及到的工

IT瞄~ react-native 加簽打包釋出app

生成一個簽名金鑰 你可以用keytool命令生成一個私有金鑰。keytool 命令所在目錄為jdk安裝目錄的bin下 $ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-a

如何自動化測試 React Native 專案 (下篇)

接著上篇的內容, 這篇文章會詳細的介紹在 Glow 我們如何寫單元測試, 以及在 React Native 中各個模組單元測試的詳細實現方式。 單元測試工具 - Jest & Enzyme Jest - Facebook Jest 是 Facebook 開源的

如何自動化測試 React Native 專案 (上篇)

React Native (RN) 是 Facebook 開源的跨平臺應用開發框架,由於 RN 提供的高效直觀的跨平臺開發模式和不錯的效能,我們在開發 Glow 的中文 App - 共樂孕的時候選擇了以 RN 為主要框架進行開發。 隨著開發模式的逐漸成熟,對RN專案的自動化測試

React-Native 專案打包(iOS/Android)

1. Android 打包 第一步:生成Android簽名證書 簽名APK需要一個證書用於為APP簽名,生成簽名證書可以Android Studio以視覺化的方式生成,也可以使用終端採用命令列的方式生成。 第二步:設定gradle變數 1

react native專案打包apk後WebView不顯示

解決android上打包rn專案後webview不顯示 <WebView ref={(w) => { this.webview = w }} javaScri

React專案如何打包釋出及遇到的坑

        使用React開發有一段時間了,下面我就把自己一些心得體會分享給大家。我使用的是create-react-app腳手架生成的專案,這個腳手架一鍵生成react專案,非常方便,先簡單記錄一下這個新建專案的過程。一、打包在專案路徑下,敲npm run buil,就

win7下react-native安卓打包踩坑

util 根目錄 2.x exce com tco 解決 研究 sig 都說工具使我們使用更加方便,然而最近研究React-native打包還有webpack這些工具,真是一把心酸一把淚。感覺這些開發工具對window系統十分不友好,外國佬都是都在用mac系統的土豪。 言歸

React Native 專案整合 CodePush 全然指南

作者 | 錢凱 杏仁移動開發project師,前嵌入式project師。關注大前端技術新潮流。 本文使用的環境: [email protected] React [email protected]

解決升級到Xcode10,react native專案執行報錯問題

今天剛升級到Xcode10,就遇到兩個報錯問題 錯誤一:Xcode 10: Build input file double-conversion cannot be found error: Build input file cannot be found: '../node_modules/react-

vue專案構建-打包-釋出--簡易demo

一、vue專案構建 首先電腦要安裝node.js及npm vue.js的官方文件給出的構建流程: #全域性安裝 vue-cli $ npm install --global vue-cli #建立一個基於 webpack 模板的新專案 $ vue init webpack my-project

react-native 專案配置ts執行環境

#全域性安裝 create-react-native-app yarn global add create-react-native-app #建立專案  create-react-native-app  my-app #安裝ts依賴 yarn add typesc

expo搭建react-native專案

react-native官網中推薦開發使用expo去開發和真機啟動專案。 在專案中可以使用expo的腳手架expo-cli去搭建,也可以使用create-react-native-app 腳手架去搭建。部落格中使用的後者。前者可以參考官網 Get Started 全域性安裝腳手架

初始化一個react-native專案

npm config set registry https://registry.npm.taobao.org --global npm config set disturl https://npm.taobao.org/dist --global npm install

如何配置jenkins +svn+sonarqube+自動化打包釋出

簡述:在這裡如何安裝jenkins 我就講解方法了,網上有很多教程。廢話不多說下面開始。 1、新增jenkins 專案maven工程 1)、點選新建任務: 2)、寫入任務名稱,在一般實際開發中我們往往有三個不同的環境正式、測試、本地(prod,dev,local),

第一次react-native專案實踐要點總結

今天完成了我的第一個react-native專案的封包,當然其間各種環境各種坑,同時,成就感也是滿滿的。這裡總結一下使用react-native的一些入門級重要點(不涉及環境)。注意:閱讀需要語法基礎: ES6 、react 、JSX 我對react-native的理解簡而言之就是 :react

WebStorm執行React Native專案

WebStorm是一款前端開發工具,也可以用於React Native專案 下載安裝WebStorm 下載破解補丁 開啟網址(IntelliJ IDEA 註冊碼),下載補丁 然後將補丁複製

react-native-echarts在打包時出現的坑

  react-native-echarts目前是RN開發中使用echarts圖表最好的外掛了,用法與Echarts完全一致,預設提供了三個屬性: option (object): The option for echarts: Documentation。 width&nbs

React Native 0.57.8 釋出,使用 React 編寫原生應用的框架

   React Native 0.57.8 釋出了,要注意的是,當升級到這個版本時,至少需要將 react 和 react-test-renderer 升級到 "16.6.0-alpha.8af6728",這是為即將到來的 React "16.6.3" 的 "fir

4.React Native專案開發如何配置除錯

本篇主要專案開發中如何除錯及除錯配置; RN除錯感覺比較痛苦,沒有Android開發或者IOS開發那麼靈活,說說如何配置; 1.在你執行起來的Android專案介面按住⌘-M會彈出如下列表 2.選擇Debug JS Remotely選項會自動開啟瀏覽器http://