Automating app distribution with DeployGate using the GitHub Actions
by
Ryosuke Horie
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GitHub Actionsを用いたDeployGate アプリ配布の自動化 2019/10/01 potatotips #65 株式会社ZOZOテクノロジーズ 開発部 堀江 亮介 Copyright © ZOZO Technologies, Inc.
Slide 2
Slide 2 text
© ZOZO Technologies, Inc. 今日話す内容 2 ● 自己紹介 ● ZOZOTOWN Androidチームでの課題 ● GitHub Actions概要 ● DeployGateでのアプリ配布を行う設定の解説と躓いたポイントの紹介
Slide 3
Slide 3 text
© ZOZO Technologies, Inc. 自己紹介 3 ZOZOテクノロジーズ 開発部 Androidエンジニア Tech Lead 堀江 亮介 Ryosuke Horie ・自動化とビールが好き ・Androidテスト全書という本を書きました ・ @Horie1024
Slide 4
Slide 4 text
© ZOZO Technologies, Inc. https://zozo.jp/ ・ 日本最大級のファッションショッピングサイト / アプリ ・ 1,200以上のショップ、7,000以上のブランドの取り扱い (2019年3月末時点) ・ 常時73万点以上の商品アイテム数と毎日平均3,200点以上の新着 商 品を掲載 ・ 即日配送サービス ・ ギフトラッピングサービス ・ ツケ払い など 4
Slide 5
Slide 5 text
© ZOZO Technologies, Inc. https://wear.jp/ ・ 日本最大級のファッションコーディネートアプリ ・ 1,300万ダウンロード突破、コーディネート投稿総数は800万件 以上(ともに2019年3月末時点) ・ 全世界(App Store / Google Playが利用可能な全ての国)で ダウンロードが可能 ・ 10万人以上のフォロワーを持つユーザー(WEARISTA)も誕生 5
Slide 6
Slide 6 text
© ZOZO Technologies, Inc. ZOZOTOWN Androidチームでの課題 6 ● デザイン確認用アプリの共有が面倒 ○ タスク毎に必要になったら手動でビルドしGoogleドライブで共有
Slide 7
Slide 7 text
© ZOZO Technologies, Inc. ZOZOTOWN Androidチームでの課題 7 ● デザイン確認用アプリの共有が面倒 ○ タスク毎に必要になったら手動でビルドしGoogleドライブで共有 ● もっと簡単に共有したい
Slide 8
Slide 8 text
© ZOZO Technologies, Inc. ZOZOTOWN Androidチームでの課題 8 ● デザイン確認用アプリの共有が面倒 ○ タスク毎に必要になったら手動でビルドしGoogleドライブで共有 ● もっと簡単に共有したい ● どうにかして解決できないか? ○ Pull Requestを出すとデザイン確認用アプリが自動配布される仕組みを作る
Slide 9
Slide 9 text
© ZOZO Technologies, Inc. どう作るか? 9 ● Pull Requestを作成したタイミングでビルドを実行
Slide 10
Slide 10 text
© ZOZO Technologies, Inc. どう作るか? 10 ● Pull Requestを作成したタイミングでビルドを実行 ● ブランチごとにDeployGateの配布ページでアプリを配布 ○ 配布ページは無制限に作成できdistribution_nameパラメータで配布ページを自動生成可能 ○ Pull Requestのcompareで指定するブランチ名で配布ページを作成 ○ 参考: gitのブランチごとに別のバージョンのアプリをDeployGateで並行して配信する
Slide 11
Slide 11 text
© ZOZO Technologies, Inc. CIサービスの選択 11 ● ZOZOTOWN、WEARチームではBitriseを使用
Slide 12
Slide 12 text
© ZOZO Technologies, Inc. CIサービスの選択 12 ● ZOZOTOWN、WEARチームではBitriseを使用 ● BitriseのPull Requestトリガーで実行するWorkflowのstepを増やしたくない ○ ビルド時間が伸びるのを防ぎたい
Slide 13
Slide 13 text
© ZOZO Technologies, Inc. CIサービスの選択 13 ● ZOZOTOWN、WEARチームではBitriseを使用 ● BitriseのPull Requestトリガーで実行するWorkflowのstepを増やしたくない ○ ビルド時間が伸びるのを防ぎたい ● 別チームがZOZOテクノロジーズのOrganizationでGitHub Actionsの検証を開始
Slide 14
Slide 14 text
© ZOZO Technologies, Inc. CIサービスの選択 14 ● ZOZOTOWN、WEARチームではBitriseを使用 ● BitriseのPull Requestトリガーで実行するWorkflowのstepを増やしたくない ○ ビルド時間が伸びるのを防ぎたい ● 別チームがZOZOテクノロジーズのOrganizationでGitHub Actionsの検証を開始 ● ZOZOTOWN AndroidチームでもGitHub Actionsを検証を兼ねて利用してみることに決定
Slide 15
Slide 15 text
© ZOZO Technologies, Inc. GitHub Actions 15
Slide 16
Slide 16 text
© ZOZO Technologies, Inc. GitHub Actions 16 ● GitHubが提供するCIサービス (Public beta) ● Workflowを構築することでタスクの自動化を行う ● Workflowとは? ○ Repository単位でカスタムできる自動化プロセス ○ Repositoryに関する様々なイベントを起点に任意の処理を実行できる
Slide 17
Slide 17 text
© ZOZO Technologies, Inc. Workflowの構成要素 17 ● 次の3つが基本の構成要素 ○ Job ■ Stepから構成されるタスクの定義 ■ 並列・シーケンシャルでの実行が可能 ○ Step ■ Jobが実行するタスクの集合 ■ コマンドまたはActionを実行可能 ○ Action ■ CircleCI Orbのような仕組み ■ 特定の処理・設定をまとめてパッケージ化されたものを利用可能 ■ 自作のカスタムアクションを作成し公開することも可能
Slide 18
Slide 18 text
© ZOZO Technologies, Inc. 実装したWorkflow 18
Slide 19
Slide 19 text
© ZOZO Technologies, Inc. 19 name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 20
Slide 20 text
© ZOZO Technologies, Inc. 20 name: Android CI on Pull Request #Workflow名 on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 21
Slide 21 text
© ZOZO Technologies, Inc. 21 name: Android CI on Pull Request on: pull_request #Pull RequestのタイミングでWorkflowをトリガー jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 22
Slide 22 text
© ZOZO Technologies, Inc. WorkflowのトリガーとなるGitHubイベント名 ● on: イベント名 ● 1つまたは複数のイベントを指定可能 ● Pull Requestのタイミングでトリガーにしたい場合 pull_request を指定 ● 指定できるイベント名は次のドキュメントにまとまっている ○ https://help.github.com/en/articles/events-that-trigger-workflows 22
Slide 23
Slide 23 text
© ZOZO Technologies, Inc. 23 name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 24
Slide 24 text
© ZOZO Technologies, Inc. 24 name: Android CI on Pull Request on: pull_request jobs: #Jobの定義 build: #Job id runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 25
Slide 25 text
© ZOZO Technologies, Inc. Jobの定義とJob id ● Jobs 以下に複数のJobを定義可能 ○ デフォルトではJobは平行に実行される ● 各jobごとに違う名前(Job id)を使用 ● needsキーワードを使用するとJobの依存関係を定義可能 25 jobs: build: #Job id build2: #Job id build3: #Job id jobs: build: build2: needs: build build3: needs: [build, build2]
Slide 26
Slide 26 text
© ZOZO Technologies, Inc. 26 name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest #Jobを実行する仮想マシンの種類 steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 27
Slide 27 text
© ZOZO Technologies, Inc. 27 name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: #Stepの定義 書かれた順に実行 - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps
Slide 28
Slide 28 text
© ZOZO Technologies, Inc. name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 #usesでactions/checkoutを使用しソースコードをCheckout - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps 28
Slide 29
Slide 29 text
© ZOZO Technologies, Inc. usesキーワード ● StepはコマンドまたはActionを実行可能 ● usesキーワードにより公開されているActionをStepの中で使用 ● actions/checkoutはGitHubが公開しているAction ○ https://github.com/actions/checkout ● ActionはMarketplaceで探せる他、3rdパーティ製ActionをまとめたRepositoryがある ○ https://github.com/marketplace?type=actions ○ https://github.com/sdras/awesome-actions 29
Slide 30
Slide 30 text
© ZOZO Technologies, Inc. name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 #usesでactions/setup-javaを使用しJDKをSetup with: #withでActionへパラメータを渡す java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps 30
Slide 31
Slide 31 text
© ZOZO Technologies, Inc. name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug #buildType debugでAPKをビルド - name: Distribute App run: | curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps 31
Slide 32
Slide 32 text
© ZOZO Technologies, Inc. name: Android CI on Pull Request on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Gradle run: ./gradlew assemblDebug - name: Distribute App run: | #cURLコマンドでDeployGateへAPKをアップロード curl \ -F "token=${{secrets.DEPLOYGATE_TOKEN}}" \ -F "file=@app/build/outputs/apk/debug/app-debug.apk" \ -F "message=git-hash:`git rev-parse --short $GITHUB_SHA`" \ -F "distribution_name=$GITHUB_HEAD_REF" \ https://deploygate.com/api/users/${{secrets.DEPLOYGATE_USER}}/apps 32
Slide 33
Slide 33 text
© ZOZO Technologies, Inc. 設定で躓いたポイント 33
Slide 34
Slide 34 text
© ZOZO Technologies, Inc. Secretsの登録と利用 ● SettingsのSecretsから登録 ● Workflowから利用するには のように参照する 34 ${{secrets.DEPLOYGATE_TOKEN}}
Slide 35
Slide 35 text
© ZOZO Technologies, Inc. ブランチ名の取得 ● 環境変数に関するドキュメントを確認 ○ https://help.github.com/en/articles/virtual-environments-for-github-actions ● 環境変数GITHUB_REFでWorkflowのトリガーとなったブランチのrefを取得可能とある ○ 実際に試すと refs/pull//merge と返ってくる ○ 同様にGITHUB_SHAはWorkflowをトリガーとなったコミットを指していない ● 暫定で環境変数GITHUB_HEAD_REFからブランチ名を取得 ○ ドキュメントではForkしたRepositoryのみに設定とあるが通常のRepositoryでも取得できてしまっている 35
Slide 36
Slide 36 text
© ZOZO Technologies, Inc. まとめ ● GitHub ActionsでPull RequestをトリガーにDeployGateでのアプリ配布を簡単に実現できた ● GitHub Actionsは豊富なGitHubのイベントをトリガーにWorkflowを実行できる ○ GitHubを中心とした開発フローの自動化がとてもやりやすい ● 自作Actionの作成も可能なのでDeployGateでの配布をActionとして公開したい 36
Slide 37
Slide 37 text
© ZOZO Technologies, Inc. サンプルコード ● https://github.com/horie1024/github_actions_android_sample 37
Slide 38
Slide 38 text
No content