Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Github Actions self-hosted runners のすゝめ

nade
March 15, 2023

Github Actions self-hosted runners のすゝめ

nade

March 15, 2023
Tweet

More Decks by nade

Other Decks in Programming

Transcript

  1. アウトライン 1. ネイティブにおける CI / CDの主な役割 2. ビルドコスト増加に伴うリスク 3. Github

    Actions self-hosted runners の紹介 4. Bitrise → Github Actions への移行 5. まとめ 4
  2. ネイティブにおける CI / CD の主な役割 自動テスト( CI / Continuous Integration

    ) アプリ配布( CD / Continuous Delively ) 6 Build Test Prepare Feedback Build Submit Store Prepare Distribute
  3. 環境構築はキャッシュを駆使してチューニング可能 自動テスト( CI / Continuous Integration ) アプリ配布( CD /

    Continuous Delively ) 7 Build Test Prepare Feedback Build Submit Store Prepare Distribute タップルにおけるビルド時間(2023)
  4. (主題)どちらもビルドで時間的コストの大半を使う 自動テスト( CI / Continuous Integration ) アプリ配布( CD /

    Continuous Delively ) 9 Build Test Prepare Feedback Build Submit Store Prepare Distribute ビルドコストは増 加していく
  5. Github Actions self-hosted runner の紹介 • 自分達で管理する実マシンやAWS EC2などの仮想マシンをGithub Actionsの実 行マシンに指定できる機能

    • 基本的にはGithub が提供するself-hosted runner アプリケーションを実行できる マシンであればどのマシンでもOK • Github Actions上からのインターフェースはほぼ変わらない • 実行時間の制限はほぼなく(35日)、マシンスペックも好きなものを選べる 23
  6. Github Actions self-hosted runner の紹介 ビルド実行時の実行マシンのラベル指定のみ 24 name: '[iOS] Test

    App' on: workflow_dispatch: jobs: build: runs-on: - self-hosted - macOS timeout-minutes: 120
  7. Github Actions self-hosted runner の注意点 • Private Repository のみの利用推奨 ◦

    forkされた場合に悪意のあるプログラムがマシン上で実行できてしまう ◦ Publicな場合はGithub Actionsが無料で利用できるので不要かも • 基本はMac 1台につき1つのマシンのみの提供 ◦ Mac OSの規約上1物理マシン上に2つのOS(ベースOS + Docker) • 複数の会社でのシェア等はMac OSの利用規約で禁止されている ◦ 24時間単位での貸し出しのみ 25
  8. Bitrise → Github Actions への移行 • 基本的な CI / CD

    に必要な機能においては代替手段あり ◦ キャッシュ管理(CocoaPods, Gem, Ruby, Java, Gradle, SwiftPM) ◦ スケジューリングビルド • 事前にワークフローの実行をfastlaneにまとめておくことで容易に移行可能 ◦ 証明書管理 → fastlane match、ビルドコマンド → fastlane gym • Bitriseにしかない機能は代替案を用意する必要あり 29
  9. Bitriseにしかない機能の代替案を用意する 31 Sandbox Tester 作成などの2FAが必要なワークフロー • Fastlaneには課金のSandbox Userの作成など、Appleの非公式APIを利用した機 能がいくつかある ◦

    api_key認証に対応していないため2FAを通過する必要がある • Bitriseには「一度2FAした認可(cookie)を保持する」機能がある ◦ Appleの2FAはリクエストされた地域外から利用すると即時無効化される ◦ Bitriseでコンソール上からマシンが2FAをリクエストし、その場でユーザーに コードを教えてもらうことで解決している https://firebase.google.com/products/app-distribution
  10. Bitriseにしかない機能の代替案を用意する 32 Sandbox Tester 作成などの2FAが必要なワークフロー Github Actions self-hosted runners を利用している場合、実行マシンと、ユーザーが

    同じ地域にいる場合はローカルで通したcookie情報をsecret経由で更新して使うことで Github Actions上で認証を通すことは可能- • ~/.fastlane/spaceship/[email] にあるcookieをCI上でも設置する https://firebase.google.com/products/app-distribution
  11. Bitriseにしかない機能の代替案を用意する 36 アプリのQRコード配布 → Firebase App Distribution に完全移行 Firebase App

    Distribution • Firebase 内のベータ版アプリ配布の機能 • 利用は完全無料 • Fastlane用の実行プラグインもある • Googleアカウントごとに制御可能 タップルでも以前から併用していたがこれを機に完全移行 https://firebase.google.com/products/app-distribution
  12. Bitriseにしかない機能の代替案を用意する 39 アプリのQRコード配布 → Firebase App Distribution に完全移行 Q: アプリ配布時にダウンロードURLが取得できる?

    YES. 下記の環境変数に結果が格納されている (移行時にはなかった) lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE] https://firebase.google.com/docs/reference/app-distribution/rest/v1/projects.apps.releases#resource:-release
  13. 実際のGithub Actions 移行後のパフォーマンス 43 • Bitriseで価格帯からスペックの良いマシンが利用できていなかったことによるマシン スペック差が大きそう • Git CloneがBitrise上よりGithub

    Action上のほうが2min早いことも • キャッシュの管理がBitriseより柔軟 https://firebase.google.com/products/app-distribution 30min → 9.5min と300%削減🎉
  14. まとめ • iOSのCI / CD SaaSは実行時間ベースの課金体系が主流になっており、価格が上 がってきている • Github Actions

    self-hosted runners を利用することで実行時間や消費クレジッ トを機にすることのないCI / CD 環境を構築できる • Bitrise → Github Actions への移行は基本的には可能 • 高いマシンスペックを活用することで大幅にCIの実行時間が短縮できる場合も 45