Githubアクションを用いたExpoアプリケーションのシームレス展開(その2 )
13279 ワード
継続
このシリーズの第1部では、Githubアクションでエキスポを使用する前にいくつかの前提条件を通過し、最初のアクションを設定する方法を示した.テストを実行してブランチを発行する方法についてもっと知りたい場合は、チェックアウトすることができます!
このセクションでは、アプリケーションの配布のためのEXPOタートルサービスを使用してアプリケーションを構築する方法と、アプリケーションの構築について説明します.
バージョン管理の重要性
なぜ我々はバージョンですか?必要ですか.どのように、これはユーザー経験を改善しますか?プロジェクトが成長するにつれて、依存関係の数が増加し、管理するのが難しくなります.最終的に、他のサービスと契約を破ることなくアップグレードするのは難しいかもしれません.バージョンコントロールは、誰もが同じページにすることができるように、我々はルールの一般的なセットを使用してこれらの依存関係を管理することができます簡単な方法です.これはSemantic Versioningであり、フォーマット
Major.Minor.Patch
の指定ルールに従う.主な変更点は、APIの変更を破る、マイナーな変更は、後方互換性のある機能を追加し、パッチのバグ修正を追加します.バージョン管理の適切な使用は、アプリケーションへの利点のスルーをもたらす可能性があります.アプリケーションのバージョン管理では、コードベースとアプリケーションのバージョンを検証することによって報告されたバグの簡単なデバッグを可能にすることができます.空気のアップデート(OTA)を設定するだけでマイナーとパッチの更新を送信するには、アプリケーションを損なうことから変更を中断を防ぐことができます.これはまた、アプリケーションの異なるメジャーバージョンを既存のアプリケーションストアから最新バージョンを取得していないユーザーのために維持することができます.
私の実装では、私の具体的には、Githubリリースタグを使用して、私のワークフローをトリガーし、また、アプリケーションを配備するためにリリースチャネルが動作することを通知するために、
prod-Major.Minor.Patch
と一致するようにタグの名前を指定します.そのコードにはたくさんのことが起こっている.私は最初にコードを提供します.そして、私がした若干の選択の詳細な説明が続きました.
name: Create Release
on:
push:
tags:
- "prod-[1-9]+.[0-9]+.[0-9]+" # Push events to matching prod-*, i.e.prod-20.15.10
jobs:
deploy_prod:
name: Deploy To Production
needs: test
runs-on: ubuntu-latest
outputs:
releaseChannel: ${{ steps.releaseChannel.outputs.releaseChannel }}
latestBinaryVersion: ${{ steps.latestBinaryVersion.outputs.version }}
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
- name: Fetch Tags
run: |
git fetch --prune --unshallow --tags -f
- uses: actions/setup-node@v1
with:
node-version: 12.x
- uses: expo/expo-github-action@v5
with:
expo-packager: npm
expo-username: ${{ secrets.EXPO_CLI_USERNAME }}
expo-password: ${{ secrets.EXPO_CLI_PASSWORD }}
expo-cache: true
- uses: rlespinasse/[email protected]
- name: Generate Release Channel # Release Channels are named prod-<Major Release>, i.e. prod-1, prod-3
id: releaseChannel
run: |
RELEASE_CHANNEL=$(echo ${{ env.GITHUB_REF_SLUG }} | sed -r 's/\.[0-9]+\.[0-9]+$//')
echo "::set-output name=releaseChannel::$RELEASE_CHANNEL"
- name: Install Packages
run: npm install
- name: Get Latest Binary Version # Binary Version will be x.x.x based on the latest tag
id: latestBinaryVersion
run: |
# Release tag finds the lastest tag in the tree branch - i.e. prod-x.x.x
RELEASE_TAG=$(echo $(git describe --tags --abbrev=0))
# Using param substitution, we output x.x.x instead
echo "::set-output name=version::${RELEASE_TAG#*-}"
- name: Echo Version Details
run: |
echo Build number is $GITHUB_RUN_NUMBER
echo Latest release is ${{ steps.latestBinaryVersion.outputs.version }}
- name: Expo Publish Channel
run: expo publish --non-interactive --release-channel=${{ steps.releaseChannel.outputs.releaseChannel }}
最初のいくつかの行では、このアクションがprod-x.x.x
という名前のタグが押された場合にのみ起こることがわかります.これは、GitコマンドラインツールまたはGithub GUI作成リリースページのいずれかで動作を実行する柔軟性を与えます.次に、ステップ
Fetch Tag
およびGet Latest Binary Version
を詳しく見ることができる.通常、我々がちょうどレポから最新のタグをつかむことになっていたならば、最新のリリースタグはつかまれるでしょう、その代わりに、私は我々が参照しているその枝から最新のタグをとるだけで、この失敗証明をすることに決めました.buildNumber
も、建設されるアプリケーションのためにapp.json
に提供されなければなりません.この場合、私はgithub action run numberを使用することを選択しました(Rununsを含まないアクションが実行されているユニークな時間をカウントします.here
Create Release
の場合、buildNumber
は3
ですまた、私は、それらのチャンネルにOTA更新をルートしたいので、EXPOのためのリリースチャンネルを最新のTAGから主要なバージョンだけをつかんでいるように、EXPOのためにリリースチャンネルを変えました.これはまた、何も壊れないように別の枝にリリースを作成することにより、アプリケーションの古いバージョンのホットフィックスを行うことができます.
リリース
リリースからリリースへの変更を追跡することができることはゲームチェンジャーです.しかし、リリースへのリリースのためのchangelogを作成する面倒は、重要な変更に欠落するストレスをもたらします.恐れはない、コミュニティは我々が過去のコミットからchangelogを生成するのを助けるために我々が利用することができる多くの若干の行動を書きました.私のケースでは、私は を選択したので、それは簡単ですし、仕事を取得します.これが完了したら、既存のリリースタグを作成または更新するために別のコミュニティアクションmetcalfc/changelog-generatorを使用します.
以下に例を示します.
create_release:
name: Create Release
needs: deploy_prod
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: rlespinasse/[email protected]
- name: Generate Changelog
id: changelog
uses: metcalfc/[email protected]
with:
myToken: ${{ secrets.GITHUB_TOKEN }}
base-ref: 'prod-0'
- name: Creating Release
uses: ncipollo/release-action@v1
with:
body: |
Changes in this Release:
${{ steps.changelog.outputs.changelog }}
token: ${{ secrets.GITHUB_TOKEN }}
name: Release ${{ env.GITHUB_REF_SLUG }}
allowUpdates: true
リリースアクション 建築・流通
最後の、そして最も重要なステップは、アプリケーションを大衆に配布して、配布するでしょう.アプリケーションのビルド時間は通常、万博ビルドサービスのために に依存して、このプロセスは、通常、かなり長い(20〜30分)です.約1時間のためにちょうどすべてのリリースの前にAndroidとIOSのバイナリの両方を構築するのを待つことを想像し、それは痛みになります.しかし、ありがたいことに、我々はアクションを自動的にすべてのリリースを書くことができますし、リリース自体、またはそれぞれのApp Storeでバイナリをアップロード!一般的に、2つのアプローチがあります.それは、URLを取得する前にサービスを完了するか、またはビルドされたバイナリが生成されたときにサーバにPOSTリクエストを送信するためのフックを使用して完了するのを待つ無料EXPOビルドサービスを使用する場合です.Githubアクションのフックのためのジョブのリスニングをスピンしたくないシンプルさのために、私は元のオプションで行くことにした.
ここでは、ジョブがAndroid APKパッケージのようにどのように見えるかのコード断片があります.IOSは、代わりに
prod-Major
を実行しているミラーだけです. build_android:
needs: [deploy_prod, create_release]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: rlespinasse/[email protected]
- uses: expo/expo-github-action@v5
with:
expo-packager: npm
expo-username: ${{ secrets.EXPO_CLI_USERNAME }}
expo-password: ${{ secrets.EXPO_CLI_PASSWORD }}
expo-cache: true
- name: Install Packages
run: npm install
- name: Build Android Release
env:
APP_BUILD_VERSION: ${{ github.run_number }}
APP_BINARY_VERSION: ${{ needs.deploy_prod.outputs.latestBinaryVersion }}
run: |
expo build:android --release-channel=${{ needs.deploy_prod.outputs.releaseChannel }} > buildLogAndroid.txt
cat buildLogAndroid.txt
- name: Parse Asset URL
id: androidUrl
run: |
ASSET_URL=$(cat buildLogAndroid.txt | tail | egrep -o 'https?://expo\.io/artifacts/[^ ]+')
echo The android url is $ASSET_URL
echo "::set-output name=assetUrl::$ASSET_URL"
- name: Download APK Asset
run: wget -O example-${{ env.GITHUB_REF_SLUG }}.apk ${{ steps.androidUrl.outputs.assetUrl }}
- name: Upload Release Asset
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./example-${{ env.GITHUB_REF_SLUG }}.apk
asset_name: example-${{ env.GITHUB_REF_SLUG }}.apk
tag: ${{ github.ref }}
私が直面した1つの課題は、ビルドが完了したときbuild:ios
アセットをつかんでいた.場合によっては、.apk
を使用して、最新のビルドだけが更新されないので、間違った結果を生むでしょう、したがって、私は問題を解決するために良い古い信頼できるregexを使うことに固執することに決めました.その後、リリースへの資産のアップロードスムーズなセーリングだった.リリースの最終的な出力はこのように見えるはずです!我々が必要とするすべての部分を簡潔にしてください.
number of projects queuing
改善
我々ができるいくつかの改善は、タグとして最新バージョンを格納し、自動的にPRの説明のバージョンベースをバンプする のようなコミュニティアクションを使用することですが、それは別の時間の話になります.改良のためのもう一つの地域は、自動的にアップロードをビルトイン
expo url:apk
と.apk
BinariesをApp Storeに直接加えることです.あなたがそれをしたいならば、あなたはプロセスGitHub Tag Bumpについてより多くを読むことができます.改善の多くの他の分野があります、そして、私はci/cdワークフローに機能を加えるためにrepoに取り組み続けます.ヒア 結論
全体的に、それは楽しい旅私はどのように実行するワークフローを望んでどのように実装する必要が計画している.また、他の人から学ぶことができますし、自分自身のためにGithubアクションを使用するようにプロセスを文書化楽しい.私は、私のメンターセバスチャンにも、プロセスで私を案内して、同じ仕事と別のプロジェクトのためにワークフローを概説するために大声を出したいです.
あなたはここでレポ全体をチェックアウトすることができます!それをフォークして、それを再生してください.
/ ジュシュシュー
エキスポギタブアクションスターター
これはdev . to postで説明された例です.詳細はすぐに利用できます.
github-actions-expo-boiler-template
Reference
この問題について(Githubアクションを用いたExpoアプリケーションのシームレス展開(その2 )), 我々は、より多くの情報をここで見つけました
https://dev.to/justussoh/using-github-actions-to-seamlessly-deploy-expo-applications-part-2-57mi
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Githubアクションを用いたExpoアプリケーションのシームレス展開(その2 )), 我々は、より多くの情報をここで見つけました https://dev.to/justussoh/using-github-actions-to-seamlessly-deploy-expo-applications-part-2-57miテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol