FlutterでiOS/Androidアプリを開発していた際に、GithubActionsを使ってAndroidのCI/CD環境を構築した際のまとめです。
この記事 is 何?
Yahoo!さん主催のハッカソン「HackU」に向けてチーム開発している際に、デザイナーのメンバーにもアプリを手元の実機で確認してもらえる環境が作りたい!
できればGithubActionsとか使ってmasterにプッシュされたら自動でビルドとデプロイを行うみたいなカッコよさげなことしてみたい!
と思ってCI/CD環境を整えた際に得た知見をまとめた記事です。
兎にも角にも完成品のyamlファイルをひとまず次に載せておきます。
完成品
name: Android CI/CD on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: install java 12.x uses: actions/setup-java@v1 with: java-version: '12.x' - name: setup cache uses: actions/cache@v1 with: path: /Users/runner/hostedtoolcache/flutter key: ${{ runner.OS }}-flutter-install-cache - name: install flutter uses: subosito/flutter-action@v1 with: flutter-version: '1.20.2' channel: 'stable' - name: flutter dependencies install run: flutter pub get - name: build apk run: flutter build apk - name: Distribute android apk run: | curl \ -H "Authorization: token ${{secrets.DEPLOYGATE_API_KEY}}" \ -F "file=@build/app/outputs/flutter-apk/app-release.apk" \ -F "message=git:$GIT_HASH" \ -F "distribution_name=$GIT_BRANCH" \ -F "release_note=new build" \ -F "distribution_key=${{secrets.DEPLOYGATE_DIST_PAGE_HASH}}" \ "https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps"
使用したもの
- publicなリポジトリ
- deploygate
publicなリポジトリにした理由は特に隠さなければいけない情報がリポジトリに含まれていないことと、GithubActionsの使用制限がpublicリポジトリの場合は無いらしいから、という理由です。
yamlファイルの説明
ビルドが走るタイミングの設定
on: push: branches: [ master ] pull_request: branches: [ master ]
この部分で、masterブランチにpushされた時と、masterブランチに向けたpull_requestが作成・更新された時にワークフローが実行されるように設定しています。
Flutternのインストールをキャッシュしておく
- name: setup cache uses: actions/cache@v1 with: path: /Users/runner/hostedtoolcache/flutter key: ${{ runner.OS }}-flutter-install-cache
この部分でFlutterのインストール先のファイルをキャッシュ対象にしておきます。
毎回インストールしていると遅くなってしまうので、同じバージョンでビルドする際にはキャッシュを使った方が早いです。
ビルドとデプロイ
- name: flutter dependencies install run: flutter pub get - name: build apk run: flutter build apk - name: Distribute android apk run: | curl \ -H "Authorization: token ${{secrets.DEPLOYGATE_API_KEY}}" \ -F "file=@build/app/outputs/flutter-apk/app-release.apk" \ -F "message=git:$GIT_HASH" \ -F "distribution_name=$GIT_BRANCH" \ -F "release_note=new build" \ -F "distribution_key=${{secrets.DEPLOYGATE_DIST_PAGE_HASH}}" \ "https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps"
flutter pub get
を実行してライブラリ関係のインストールを行います。
次に
flutter build apk
でビルドを実行してapkファイルを出力します。
最後にcurlコマンドを実行してdeploygateにデプロイしているのですが、詳細はDeploygateを利用したアプリのアップロードをみてもらえると良いかと思います。
使用しているSecretsの詳細
名前 | 内容 |
---|---|
DEPLOYGATE_API_KEY | Deploygateのアカウント設定>APIKeyに記載されている値です |
DEPLOYGATE_DIST_PAGE_HASH | Deploygateのアプリ配布ページURLに記載されているハッシュ値です |
DEPLOYGATE_USER | Deploygateのアカウントに登録されたユーザ名です |