一、打 Android APK 后,上传至蒲公英
在GitHub项目根目录下创建
.github/workflows/release.yml
文件,代码如下:
name: CI
on:
push:
branches: [ release ]
pull_request:
branches: [ release ]
env:
PGYER_API_KEY: 9b8a407f285532d6759289xxxxxxxxxx
APK_FILE_PATH: android/app/build/outputs/apk/release
APK_FILE_NAME: app-release.apk
jobs:
build-and-upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Get yarn cache
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Cache dependencies
uses: actions/cache@v1.2.0
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install yarn dependencies
run: |
echo Node.js runtime version: $(node -v)
yarn config set registry https://registry.npm.taobao.org
yarn
- name: Run unit test
run: yarn test
- name: Build release apk
run: |
cd android
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
bash gradlew assembleRelease
- name: Upload apk to artifact
uses: actions/upload-artifact@v1
with:
name: ${{env.APK_FILE_NAME}}
path: ${{env.APK_FILE_PATH}}
- name: Upload apk to Pgyer
run: |
curl -F 'file=@${{env.APK_FILE_PATH}}/${{env.APK_FILE_NAME}}' -F '_api_key=${{env.PGYER_API_KEY}}' https://www.pgyer.com/apiv2/app/upload
-
push: [ release ] 和 pull_request : [ release ]
表示代码 push 和 PR 到 release 分支就触发这个 CI -
env
表示该脚本的全局环境变量,使用时用${{env.PGYER_API_KEY}}
-
jobs
表示下面有几个任务需要执行,我这里只有build-and-upload
一个任务 -
runs-on
表示运行在什么系统上,目前(截止2020-4-20)支持:ubuntu
,windows
,macOS
三种系统,更多信息。 -
name
表示每个最小任务,但下面又可以 run 一或多个命令,一条命令就直接跟在 run 后面就行,如果是多条命令只需写在: |
符下 -
fs.inotify.max_user_watches
提高监听的文件数量,该值默认只有128
个,我在脚本里改为了524288
。因为我们在执行assembleRelease
时需要监听项目代码和 node_modules 的代码,所以128
肯定是不够的。 -
yarn config set registry
每次安装项目依赖前,先设置淘宝源。(注:不需要
先安装 Node.js 、再安装 npm i -g yarn,而是直接使用 yarn 命令
即可,我猜是 GitHub Actions 自动帮我们安装好了) -
bash gradlew assembleRelease
表示在 like Unix 的系统下,用 bash 来执行 shell 文件。如果你是runs-on: windows-latest
,需要改为gradlew.bat assembleRelease
-
curl -F
这行是将 apk 文件上传至蒲公英(完整命令如:curl -F 'file=@android/app/build/outputs/apk/release/app-release.apk' -F '_api_key=9b8a407f285532d6759289xxxxxxxxxx' https://www.pgyer.com/apiv2/app/upload
),这里推荐大家使用 v2 的接口,官方说 v1 不再维护了,https://www.pgyer.com/doc/view/api#uploadApp -
蒲公英 API Key
获取地址 https://www.pgyer.com/account/api
二、自动发 Code Push 热更新
在GitHub项目根目录下创建
.github/workflows/hotfix.yml
文件,代码如下:
name: CI
on:
push:
branches: [ hotfix ]
pull_request:
branches: [ hotfix ]
env:
CODE_PUSH_SECRET_KEY: 9a5bc0c5507d4a3524b9cc76xxxxxxxxx
jobs:
push-hotfix-bundle:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Get package.json version
id: version
uses: notiz-dev/github-action-json-property@release
with:
path: ./package.json
prop_path: version
- run: echo ${{steps.version.outputs.prop}}
- name: Install code push service for react native
run: sudo npm install -g code-push-cli
- name: Login code push service center
run: code-push login --accessKey ${{env.CODE_PUSH_SECRET_KEY}}
- name: Install yarn dependencies
run: |
echo Node.js runtime version: $(node -v)
yarn config set registry https://registry.npm.taobao.org
yarn
- name: Run unit test
run: yarn test
- name: Set ubuntu fs max user watch
run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
- name: Push hotfix bundle to every registered apps
run: |
code-push whoami
code-push release-react myApp android --dev false --targetBinaryVersion "${{steps.version.outputs.prop}}" --des "有紧急版本更新,请及时安装" -d Production -m
-
push: [ hotfix ] 和 pull_request : [ hotfix ]
表示代码 push 和 PR 到 hotfix 分支就触发这个 CI -
notiz-dev/github-action-json-property@release
是一个读取 package.json 的包,用于给指定的版本发 code push。id
表示获取值后存放在该变量下,path
表示指定读取文件,prop_path
表示需取值的 key,使用方法:${{steps.version.outputs.prop}}
-
code-push-cli
安装 code push 需求 sudo 权限来执行 -
code-push login
每次执行 code push 前要先登录 -
code-push release-react
就是发 code push 的命令
三、特别说明
1、在哪儿取到
Code Push accessKey
答:先在本地安装 sudo npm install -g code-push-cli
,然后执行 code-push login
,就能看到获取到 accessKey
了。
2、为什么把 key 直接写在 yml 文件里?好像不安全呢?
答:我这个项目属于 private,项目之外的人没有权限看到,所以偷个懒(如果你的项目是 public
千万别这么做),安全的做法是:创建 GitHub secret,然后在项目中用 ${{secrets.CODE_PUSH_SECRET_KEY}}
这种形式使用,添加 GitHub secret
方法如下图所示:
如果本文对你有帮助,请点赞、分享!