FlutterプロゞェクトでGithubActions for CI / CDの無料機胜を䜿甚する

GitHub Actionsは、リポゞトリを䜿甚しお日垞的なアクションを自動化し、プロゞェクトのCI / CDを䜜成するのに圹立぀ツヌルです。



GitHubナヌザヌは、サヌビスむンフラストラクチャでGitHubアクションを実行するために月に2000分を取埗したす。この自由な時間を有効に掻甚したしょう。



Flutterアプリケヌションの開発者向けに、GitHubアクションを䜿甚しおプルリク゚ストごずにテストずコヌドアナラむザヌを実行し、アヌティファクトを䜜成しおFirebaseでテストするためにデプロむする方法を説明したす。







人はすぐに良いこずに慣れたす。そしお、圌はそれにずおも慣れおいるので、それがい぀もこのようではなかったずいう事実に぀いおさえ考えたせん。男ず山矊に぀いおの叀い逞話が蚀うように、人生のすべおの喜びの実珟は、あなたがこれらの非垞に喜びを奪われたたさにその瞬間に起こりたす。



あなたの䜜業プロゞェクトがCI / CDでうたくいっおいるなら、あなたは幞運な人です。

スタヌトアップで䜜業しおいお、すべおのパむプラむンずフックを自分の手で慎重に構成しおいるかもしれたせん。



DevOpsチヌム党䜓があなたの幞犏を管理しおいる可胜性がありたす。毎月、新しい統合、目の前でのビルド時間の溶解、想像を絶するすべおの堎所にアセンブリを展開するための高床な技術で満足しおいたす。



それは問題ではありたせん。重芁なこずは、アセンブリが実行可胜であるこずを垞に確信しおいるず同時に、開発者を垞にう぀病やう぀病に陥らせるずいう非垞に退屈な日垞業務を自分で免れるこずです。ちなみに、最埌にJiraの問題のステヌタスを手動で倉曎したのはい぀ですかコメントを曞いおいただければ幞いです。



あなたの快適ゟヌンを離れる



圌らはどこで快適ゟヌンを離れたすか、そしお最も重芁なのは、なぜですか倚くの理由。友人から、自分のバヌ甚の小さなアプリケヌションの䜜成を手䌝っおほしいず頌たれたした。あなたは぀いに倢のペットプロゞェクトを実装する時間を芋぀けたか、プロゞェクトの䞀環ずしお誀っお䜜成されたラむブラリをリリヌスするこずにしたした。最埌に、あなたずあなたの同僚は、ワヌクショップ甚の小さなサンプルプロゞェクトを曞くこずにしたした。



どのシナリオでも、新しい興味深いタスクからのむンスピレヌションは、「空気のない環境」での゜フトりェア開発の厳しい珟実ずすぐに衝突するでしょうはい、ある時点で、空気のようなスマヌトコレクタヌが必芁になりたす。



「CI / CDは難しい 」



そんな時、普段は自分に䜕ず蚀っおいたすか「わかりたせんフロント゚ンド/携垯電話を曞いおいるずころですが、あなたのゞェンキンスに぀いおは䜕も知りたせん」そのようなこずを知る必芁はないず蚀ったらどうしたすか



はい、コン゜ヌルコマンドを䜿甚しおプロゞェクトをビルドできる必芁がありたす-それだけです。たずえそれが個人的な小さなプロゞェクトであり、IDEを消化するのがすでに難しい巚倧なマルチモゞュヌルモンスタヌでなくおも、あなたはあなたの人生を倧いに単玔化するこずができたす。



Github Actionsはずおもシンプルなので、おばあちゃんでも簡単にセットアップできたす。



それでは、投皿は䜕に぀いおですか



すべおがずおも単玔な堎合、なぜこの䜜品を読んで時間を無駄にするのですか箇条曞きでお答えしたす。



  • Flutter. CI . , Flutter- . ,

  • . Github Actions —  . 2 000 ( ). - , .

  • . Flutter Android iOS , - . , , , .



c CI/CD , . . ($).


Github Actions, !



Github Actionsは、リポゞトリのワヌクフロヌを自動化できるサヌビスです。コヌドを盎接蚘述する以倖に、プロゞェクトで手動で行うこずはすべお、Githubアクションに委任できたす。䞀次情報源にすぐに粟通したい堎合は、公匏ドキュメントにアクセスしおください。



倚くの堎合、䜕を自動化する必芁があるのか​​たったくわかりたせん。チヌムには、サヌビスの耇雑なAPIを理解しおから、゜リュヌションを最初から䜜成しおデバッグする時間がありたせん。マヌケットプレむスはこの問題を解決したす。倚くの䞀般的なタスクを解決する玄5000の既補のアクションが公開されおいたすたずえば、Telegramでのむベントに関する通知の送信、プロゞェクト゜ヌスの技術的負債の分析、倉曎されたファむルに応じおPRにラベルを蚭定したす。悪いニュヌスそれらの倚くはシェアりェアであり、かなり厳しい䜿甚制限がありたす。



䜜業プロセス



Github Actionsのすべおは、ワヌクフロヌを䞭心に展開しおいたす。各ワヌクフロヌは、䜕をするか、い぀行うかずいう2぀の質問に答えたす。



䜕をすべきか。ここには無数のオプションがありたす。既補のスクリプトたたは自分で行うスクリプトを䜿甚しお、ビルドをビルド、テスト、およびデプロむできたす。ワヌクフロヌ構成の詳现



い぀実行するか。リポゞトリで発生するむベントでワヌクフロヌをトリガヌできたす。プルリク゚ストの䜜成、コミットタグのプッシュ、たたはプロゞェクトぞの新しいスタヌの远加。フックの完党なリスト



ワヌクフロヌをむベントではなく、特定の時間たたは特定の頻床で実行する必芁がある堎合は、POSIXcron構文を自由に䜿甚できたす。定期的なむベントの詳现



リポゞトリでは、倚くの異なるワヌクフロヌが同時に共存できたす。各ワヌクフロヌは個別のYAMLファむルに蚘述されおおり、各ファむルはリポゞトリのルヌトにある.github / workflowsディレクトリに保存する必芁がありたす。ワヌクフロヌ構文の詳现



実行時環境



Github Actionsには、ワヌクフロヌを実行するための2぀のオプションがありたす。



  • Github-hosted runners — , . Windows, Linux macOS. , Codemagic, ( ). , , ;

  • Self-hosted runners — , . Github , .



私の蚘事では、最初のオプションに焊点を圓おたす。私たちは可胜な限り単玔な道をたどっおいたすよね



Flutterの基本的なワヌクフロヌの蚭定



ワヌクフロヌの構成を開始する前に、2぀のこずに同意する必芁がありたす。



たず、ワヌクフロヌの䞻な圹割は、コヌドベヌスの内蚳を耇雑にするこずです。ビルドされない、朜圚的な問題が含たれる、たたはテストに倱敗するコヌドは、䞻流になるべきではありたせん。



第二に私の構成にはあなたのプロゞェクトに関係のない埮劙な点があるかもしれたせん。説明しようず思いたす。ただし、この蚘事をガむドずしお䜿甚しおいる堎合は、慎重に借りおください。



最埌に、ワヌクフロヌで䜕をすべきかを決定したしょう。正しい方向に進むための蚈画が必芁です。



完成したアセンブリぞのステップバむステップ



䞊蚘の蚈画は、独自のワヌクフロヌを蚭定する際のチェックリストずしお䜿甚できたす。するべき



  1. ワヌクフロヌに意味のある名前を付けたす。
  2. ワヌクフロヌが開始されるむベントを瀺したす。
  3. 起動する構成をマシンで決定したす。
  4. ワヌクフロヌの構成手順を決定したす。


  • プロゞェクトをチェックアりトし、
  • Javaのむンストヌル。
  • Flutterのむンストヌル芚えおいるように、クリヌンなむンスタンスを自由に䜿甚できるようになるたびに、
  • プロゞェクトパッケヌゞのダりンロヌド、
  • 静的アナラむザヌを起動し、
  • テストの実行、
  • ビルドアセンブリ自䜓、
  • テスタヌが入手できる堎所にビルドをデプロむしたす。


今、私たちの仕事は具䜓的な圢になっおいたす。実装に移りたしょう。



私たちのワヌクフロヌは最埌にどのように芋えるか
— . , , .



name: Flutter PR

on:
 pull_request:
   branches:
     - "dev/sprint-**"
   paths-ignore:
     - "docs/**"
     - "openapi/**"
     - ".vscode/**"

jobs:
 build:
   runs-on: ubuntu-latest
   steps:
     - uses: actions/checkout@v1
     - uses: actions/setup-java@v1
       with:
         java-version: "12.x"

     - uses: subosito/flutter-action@v1
       with:
         channel: "stable"

     - run: sh ./scripts/flutter_pub_get.sh

     - run: sh ./scripts/flutter_analyze.sh

     - run: flutter test

     - run: flutter build apk --release

     - uses: actions/upload-artifact@v1
       with:
         name: APK for QA
         path: build/app/outputs/apk/dev/debug/apk_name.apk

     - name: Upload artifact to Firebase App Distribution
        uses: wzieba/Firebase-Distribution-Github-Action@v1
        with:
          appId: ${{ secrets.FIREBASE_ANDROID_PROD_APP_ID }}
          token: ${{ secrets.FIREBASE_TOKEN }}
          groups: testers
          file: build/app/outputs/apk/dev/debug/apk_name.apk
          debug: true




名前



明らかに、名前がその本質をできるだけ正確に反映するように、ワヌクフロヌに名前を付ける必芁がありたす。名前docsは、ワヌクフロヌの実行時にアクションコン゜ヌルに最初に衚瀺されるものです。ワヌクフロヌにそのように名前を付けた理由は、すぐにわかりたす。







name: Flutter PR


トリガヌむベント



「on」 ブロックdocsを䜿甚するず、登録時にワヌクフロヌを開始する1぀以䞊のむベントを指定できたす。さらに、䞀郚のむベントは埮調敎できたす。 



どのむベントを遞択したすか内蚳を芋逃さないように、少なくずも既存のすべおのむベントを指定できたす。その埌、アセンブリはほが継続的に実行されたすが、これが必芁ですかいいえ、この堎合のように、無料料金プランの制限は玠晎らしくすぐに終了したす。最適な゜リュヌションを探したす。



私たちのプロゞェクトが、プルリク゚ストの䜜成を通じおのみ、コヌドをプロゞェクトのメむンブランチに盎接プッシュするこずはできないずいう合意に準拠しおいるず仮定したしょう。ワヌクフロヌがプルリク゚ストの䜜成に応答し、倉曎されたコヌドベヌスからプロゞェクトをビルドするかどうかは論理的です。



on: pull_request


$これは仕事には十分ですが、解決策はただあたり最適ではありたせん。ビルドは、プルリク゚ストが䜜成されるたびにトリガヌされたす。プロゞェクトのメむンブランチに向けられたプルリク゚ストのみに関心があるため、これは冗長です。Github Actionsの構文を䜿甚するず、関心のあるブランチの名前たたはマスクを指定できたす。



on:
 pull_request:
   branches:
     - "dev/sprint-**"


$そしおたた、プロセスを最適化する方法を探しおいたす。理論䞊でも、プロゞェクトに害を及がすこずのないファむルがありたす。プロゞェクトドキュメント、Swagger、䞀般的なコヌドスタむルの蚭定、IDEです。幞い、パスマスクによっおそのようなファむルを無芖するこずができたす。その結果、「on」ブロックは次のようになりたす。



on:
 pull_request:
   branches:
     - "dev/sprint-**"
   paths-ignore:
     - "docs/**"
     - "drz-swagger/**"
     - ".vscode/**"


重芁プルリク゚ストは、マヌゞする準備ができおいる堎合にのみ行っおください。䜜成枈みのプルリク゚ストを次にプッシュするたびに、ワヌクフロヌが再開されたす。

ゞョブ構成







これで、ゞョブを構成する準備が敎いたしたdocs。今こそ、ワヌクフロヌでゞョブが果たす圹割を明確にするずきです。



すべおのワヌクフロヌには、少なくずも1぀のゞョブが含たれおいる必芁がありたす。これは、ステップバむステップの説明を含むゞョブであるステップ私たちは私たちのプロゞェクトを実行したす。1぀のワヌクフロヌのゞョブ数、および1぀のゞョブのステップ数に制限はありたせん。デフォルトでは、あるゞョブの別の結果ぞの䟝存関係が指定されおいない限り、すべおのゞョブが䞊行しお実行されたす。私たちのプロゞェクトには、プロゞェクトの構築を担圓する単䞀の仕事がありたす。



環境のセットアップ



クリヌンな仮想マシンむンスタンスでワヌクフロヌが実行されるたび。遞択できるのは、このマシンにむンストヌルされるオペレヌティングシステムだけです。䜕を遞ぶ



タヌゲットプラットフォヌムAndroidずiOS甚のFlutterアプリケヌションを構築するこずを蚈画しおいるため、macOSを遞択するのは魅力的です。悪いニュヌス。 macOSでむンスタンスを䜿甚した堎合の1分間は、Ubuntuでむンスタンスを䜿甚した堎合の1010 !!!分ずしお請求されたす。 Windowsのむンスタンスでは、この堎合、iOSアセンブリをアセンブルするこずはただ䞍可胜であり、その䜿甚時間はUbuntuのむンスタンスの2倍であるため、たったく意味がありたせん。$の請求に぀いおの詳现



2,000分の無料時間が200にならないようにするにはどうすればよいですか良い解決策はありたせん。プルリク゚ストを䜜成するずきに、iOSでビルドをビルドしないこずにしたした。これは、iOSビルドの安定性に圱響を䞎える可胜性がありたす。劥協オプションもありたす-pubspec.yamlたたは/ iosディレクトリから任意のファむルを倉曎する堎合にのみmacOSでiOSビルドをビルドするか、それ以倖の堎合は、Ubuntuを䜿甚するむンスタンスでAndroidビルドのみをビルドしたす。これは、「on」ブロックの無芖ファむルを蚭定する方法ず同様に行うこずができたす。



jobs:
 build:
   runs-on: ubuntu-latest


技術仕様ず、むンストヌルされおいる「すぐに䜿甚できる」゜フトりェアのリストを 確認できたす。残念ながら、FlutterずJavaはこのリストに含たれおいたせん。ワヌクフロヌを実行するたびに手動でむンストヌルする必芁がありたす。



慌おお急いではいけたせん。既成のアクションが私たちの助けになり、それを私たちの仕事のステップで䜿甚するこずができたす。2぀䜿甚したす。



  • アクション/セットアップ-java -Java環境をセットアップするための公匏アクション。

  • subosito / flutter-actionは、 FlutterSDKをダりンロヌドしおむンストヌルするための非公匏のアクションです。それ自䜓が十分に蚌明されおいたす。たずえば、目的のフレヌムワヌクチャネルを指定したり、特定のSDKバヌゞョンに切り替えたりするなど、必芁なこずをすべお実行できたす。



steps:
      - uses: actions/setup-java@v1
        with:
          java-version: "12.x"

      - uses: subosito/flutter-action@v1
        with:
          channel: "stable"


リポゞトリのクロヌニング



Githubから数分間レンタルしたマシンのクリヌンなむンスタンスがありたす。前のステップでは、必芁なすべおの゜フトりェアをむンストヌルしたした。次に、プロゞェクトの゜ヌスリポゞトリのクロヌンを䜜成する必芁がありたす。これを行うには、既補のツヌルを䜿甚したす。



  • アクション/チェックアりトは、ほずんどの堎合に必芁ずされない倧量の蚭定を䜿甚しおリポゞトリをクロヌン化するための公匏アクションです。ワヌクフロヌはクロヌン䜜成しおいるリポゞトリで盎接実行されるため、明瀺的に指定する必芁はありたせん。



- uses: actions/checkout@v1


䟝存関係の読み蟌み



これたで、私たちは自分たちの手で手順を実行するのではなく、私が提䟛する既成のアクションのみを䜿甚しおいたした。次に、プロゞェクトのアクティブビルドフェヌズの実装に移りたす。それでは、ステップの実装を自分で䜜成するずきが来たした。



ビルドする前に、pubspec.yamlファむルの䟝存関係ブロックにリストされおいるすべおのパッケヌゞず、それらのすべおの䞀時的な䟝存関係をダりンロヌドする必芁がありたす。これを行うために、FlutterSDKはすぐに䜿甚できる簡単なコマンドを提䟛したすflutter pub get。ステップの実装は、1぀の端末コマンドを呌び出すこずで構成できたす。この堎合、次のステップは、このコマンドの完了時にのみ呌び出されたす。



- run: flutter pub get


プロゞェクトの構造が耇雑で、ロヌカルに接続されおいる倚数のダヌツパッケヌゞが含たれおいる堎合、問題が発生したす。flutter pub getこれらの各パッケヌゞを明瀺的に呌び出さずにプロゞェクトを構築するこずは䞍可胜です。私のプロゞェクトでは、このようなパッケヌゞはルヌトディレクトリにある/ coreフォルダヌに収集されたす。以䞋は、この問題を解決するスクリプトです。これは、同じルヌトディレクトリの/ scriptsフォルダヌにあるflutter_pub_get.shファむルに蚘述されおいたす。



flutter pub get
cd core
for dir in */ ; do

    echo ${dir}
    cd ${dir}
    pwd
    flutter pub get
    cd ..
    pwd
    if [ "$#" -gt 0 ]; then shift; fi
    # shift
done


stepの実装は任意の端末コマンドにするこずができるため、シェルスクリプトの実行を劚げるものは䜕もありたせん。



- run: sh ./scripts/flutter_pub_get.sh


静的コヌド分析



Flutterは、組み蟌みコマンドを䜿甚しflutter analyzeお静的アナラむザヌを実行するように勧めおいたす。これは、コヌドベヌスの朜圚的な問題を早い段階で特定するのに圹立ちたす。バグが本番環境に到達する前、たたはコヌドが読み取り䞍胜でサポヌトされおいない混乱に倉わる前です。



すぐに䜿甚できる機胜を利甚するこずもできたしたが、残念ながら、デフォルトのチヌム動䜜flutter analyzeには欠陥があり、間違ったタむミングでワヌクフロヌが台無しになりたす。 



アナラむザヌによっお怜出された問題は、情報、譊告、゚ラヌの3぀の重倧床レベルに分類されたす。この号では分析䞭に情報クラスの問題のみが芋぀かった堎合でもそしお今ここでそれらを修正するこずに時間を費やす䟡倀があるずは限らない、コマンドはコヌド「1」を返し、その結果、アセンブリがクラッシュするこずが説明されおいたす。



䞀時的な解決策ずしお、次のスクリプトを䜿甚するこずをお勧めしたす。今埌、゚ラヌレベルに問題がある堎合にのみ、アセンブリがクラッシュしたす。



OUTPUT="$(flutter analyze)"
echo "$OUTPUT"
echo
if grep -q "error •" echo "$OUTPUT"; then
    echo "flutter analyze found errors"
    exit 1
else
    echo "flutter analyze didn't find any errors"
    exit 0
fi


ワヌクフロヌの次のステップでシェルスクリプトを実行したす。



- run: sh ./scripts/flutter_analyze.sh


テストの実行



プロゞェクトにテストがある堎合は、正しい方向に進んでいたす。テストが機胜するには、テストを䜜成するだけでは䞍十分です。実装の欠陥を時間内に修正したり、必芁に応じお曎新したりするために、テストを定期的に実行する必芁がありたす。したがっお、次のステップでは、実装したす



- run: flutter test


泚意実装されたテストを含たない空のテストクラスは、ワヌクフロヌ党䜓をクラッシュさせたす。唯䞀の方法がありたす。少なくずも1぀のテストを実装する準備ができるたで、テストクラスを宣蚀しないでください。



構築しお眲名する



すべおの準備䜜業は終了したした。コヌドに明らかな問題が含たれおいない可胜性が高いこずを確認したした。次に、最も重芁な段階であるアヌティファクトの䜜成に移りたす。぀たり、APKを構築したす。



アセンブリ自䜓の実装は非垞に簡単です。タヌミナルコマンドのフラッタヌビルドを自由に䜿甚できたす。これは非垞に深く構成可胜で、特定のフレヌバヌ、メむンファむル、ABIのアヌティファクトをビルドできたす。この蚘事ではこれらのニュアンスに぀いおは説明しおいたせん。必芁に応じお、远加のコマンドフラグを䜿甚しおください。



- run: flutter build apk --release


私たちの目暙は、リリヌスキヌでアセンブリに眲名するこずです。そしお、この段階では、リリヌスキヌストアずそのすべおの゚むリアスずパスワヌドをどこかに保存する必芁があるため、セキュリティの問題を解決する必芁がありたす。



Githubを䜿甚するず、文字列倀を専甚のシヌクレットリポゞトリに安党に保存できたす。ここで利甚可胜なデヌタは適切なリポゞトリに保存され、ワヌ​​クフロヌの任意のステップからプログラムで読み取るこずができたす。同時に、倀はGithubWebむンタヌフェむスからは衚瀺されたせん。削陀たたは䞊曞きのみが蚱可されたす。







これは、特に独自のセキュリティサヌビスの堎合、゚むリアスずパスワヌドに適した゜リュヌションのように芋えたすが、*。jksファむル自䜓はどうでしょうか。リポゞトリがプラむベヌトであっおも、リポゞトリにプッシュするのは良い考えではないようです。残念ながら、Githubはファむルを保存する安党な方法を提䟛しおいないため、回避する必芁がありたす。



キヌストアファむルを文字列ずしお衚すず䟿利です。そしおそれは本物です-あなたはそれをbase64で゚ンコヌドする必芁がありたす。これを行うには、* .jksファむルを含むディレクトリでタヌミナルを開き、次のコマンドを実行したす。次に、キヌストアのbase64衚珟をコピヌできるテキストファむルが䜜成され、Githubシヌクレットに保存されたす。



openssl base64 < key_store_filename.jks | tr -d '\n' | tee keystore.jks.base64.txt


アセンブリに正垞に眲名するために必芁なすべおの芁玠が揃ったので、ステップの構成に進みたす。 envブロックでは、その特定のステップのすべおの環境倉数を宣蚀したす。シヌクレットからこれらの倉数の倀を取埗したす。



- run: flutter build apk --release
        env:
          STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
          KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
          STORE_FILE: ${{ secrets.STORE_FILE }}


Androidホストでは、眲名されたアセンブリをロヌカルで構築する機胜を倱うこずなく、CIでも* .apkファむルに眲名できるようにアセンブリ構成を蚘述する必芁がありたす。keystoreConfig.gradleファむルがこの瞬間を担圓したす。keystore_release.propertiesファむルが芋぀かった



堎合、ビルドはロヌカルで行われるこずがわかっおいたす。぀たり、ファむルから読み取るだけで、keystoreConfigのすべおのプロパティを初期化できたす。それ以倖の堎合、アセンブリはCIで行われたす。぀たり、機密デヌタの唯䞀の゜ヌスはGithubシヌクレットです。



ext {
   def releaseKeystorePropsFile = rootProject.file("keystore/keystore_release.properties")
   if (releaseKeystorePropsFile.exists()) {
       println "Start extract release keystore config from keystore_release.properties"
       def keystoreProps = new Properties()
       keystoreProps.load(new FileInputStream(releaseKeystorePropsFile))
       keystoreConfig = [
               storePassword: keystoreProps['storePassword'],
               keyPassword  : keystoreProps['keyPassword'],
               keyAlias     : keystoreProps['keyAlias'],
               storeFile    : keystoreProps['storeFile']
       ]
   } else {
       println "Start extract release keystore config from global vars"
       keystoreConfig = [
               storePassword: "$System.env.STORE_PASSWORD",
               keyPassword  : "$System.env.KEY_PASSWORD",
               keyAlias     : "$System.env.KEY_ALIAS",
               storeFile    : "$System.env.STORE_FILE"
       ]
   }
   println "Extracted keystore config: $keystoreConfig"
}


そしお、これはkeystore_release.propertiesファむルがどのように芋えるかです



storePassword={___}
keyPassword={___}
keyAlias={___}
storeFile=../keystore/keystore.jks


Androidホストのbuild.gradleファむル の最埌のステップは、keystoreConfigファむルをリリヌスビルド眲名構成に適甚するこずです。



android {
   signingConfigs {
       release {
           apply from: '../keystore/keystoreConfig.gradle'

           keyAlias keystoreConfig.keyAlias
           keyPassword keystoreConfig.keyPassword
           storeFile file(keystoreConfig.storeFile)
           storePassword keystoreConfig.storePassword
       }
   }
}


眲名されたアセンブリはすでに私たちの手にありたすしかし、テストのためにそれを同僚にどのように拡匵したすか



荷降ろし



Github Actionsを䜿甚するず、アセンブリを配垃するためのほがすべおの既知のツヌルぞのアヌティファクトのアップロヌドを構成できたすが、怜蚎するオプションは2぀だけです。



  • Githubストレヌゞ-アセンブリを独自のGithubストレヌゞにアップロヌドする最も簡単な方法。箱から出しおすぐに機胜したすが、いく぀かの制限がありたす。

  • Firebase App Distributionは、BetaをCrashlyticsに眮き換えたFirebase゚コシステムのサヌビスです。統合の構成は少し難しいですが、サヌビス自䜓の方がはるかに䟿利です。





Github Storage

Github Storageは、公匏アクションを通じお簡単に統合できたす。同僚がWebむンタヌフェむスに衚瀺するアセンブリの名前ず、CIでアセンブルされた* .apkファむルぞのパスを指定する必芁がありたす。



- uses: actions/upload-artifact@v1
        with:
          name: APK for QA
          path: build/app/outputs/apk/dev/debug/apk_name.apk


䞻な問題は、限られたストレヌゞスペヌスです。無料プランでは、500MBしか提䟛されたせん。最も奇劙なこずは、Webむンタヌフェむスを介しおストレヌゞ党䜓を䞀床に手動でクリアする方法が芋぀からなかったため、苔むしたアヌティファクトからストレヌゞをクリアするこずだけを担圓する別のワヌクフロヌを䜜成するこずで状況から抜け出したした。



ワヌクフロヌは毎日午前1時に実行され、1週間より叀いすべおのアヌティファクトを削陀したす。



name: Github Storage clear

on:
  schedule:
    - cron: '0 1 * * *'

jobs:
  remove-old-artifacts:
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: Remove old artifacts
        uses: c-hive/gha-remove-artifacts@v1
        with:
          age: '1 week'


Firebase App Distribution

Firebase App Distributionに぀いおは、既補のアクションwzieba / Firebase-Distribution-Github-Actionを䜿甚しお統合したした。 



- name: Upload artifact to Firebase App Distribution
        uses: wzieba/Firebase-Distribution-Github-Action@v1
        with:
          appId: ${{ secrets.FIREBASE_ANDROID_PROD_APP_ID }}
          token: ${{ secrets.FIREBASE_TOKEN }}
          groups: testers
          file: build/app/outputs/apk/dev/debug/apk_name.apk
          debug: true


アクションが正しく機胜するには、次のパラメヌタを枡す必芁がありたす。



  • appId -Firebaseプロゞェクトの蚭定にあるアプリケヌション識別子。







  • トヌクン-サヌビスにアセンブリをロヌドするために必芁ずされるあなたのFIrebaseプロゞェクトぞの認蚌甚トヌクン。トヌクンはFirebaseCLIを介しおのみ取埗できたす。詳现に぀いおは、公匏ドキュメントを参照しおください。

  • file -CI䞊のコンパむル枈み* .apkファむルぞのパス。

  • groups-このパラメヌタヌはオプションですが、アップロヌドされたアセンブリが自動的に共有されるテスタヌグルヌプの゚むリアスを指定できたす。



打ち䞊げず芳察



最も単玔なワヌクフロヌの準備が敎いたした。あずは、トリガヌむベントを発生させお、ワヌクフロヌの進行状況を監芖するだけです。



アドバむスず別れの蚀葉



これで、サむズ、開発匷床、たたはりォレットに関係なく、Flutterプロゞェクトで単玔なCI / CDメカニズムのすべおの利点を享受できたす。



最埌に、このワヌクフロヌの䜜業䞭に思い぀いたヒントず所芋を次に瀺したす。



  • workflow . workflow , , . - . , - workflow , .

  • step’ shell-. workflow . . .

  • Run Duration workflow. workflow , . workflow , step’. . Flutter SDK . — 5-6 .



ただただたくさんの朜圚的な改善ず改善がありたす。ワヌクフロヌを改善するためのアむデアをコメントに曞き蟌んでください。個人的に䜕が欠けおいたすかおそらく、読者の最も興味深いアむデアの実装は、このトピックに関する次の蚘事の基瀎を圢成するでしょう。



すべおのスクリプトずワヌクフロヌは、テストアプリケヌションのリポゞトリにありたす。



枅聎ありがずうございたした。



PS私たちのSurfチヌムは、Flutterに圹立぀倚くのラむブラリをリリヌスしおいたす。それらをSurfGearリポゞトリにアップロヌドしたす。



All Articles