Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Github Actions self-hosted runners のすゝめ
Search
nade
March 15, 2023
Programming
0
550
Github Actions self-hosted runners のすゝめ
CA.Swift #16
https://cyberagent.connpass.com/event/233745/
nade
March 15, 2023
Tweet
Share
More Decks by nade
See All by nade
Server-Driven UI入門: 画面のStateを直接受け取るアプローチ
kazumanagano
5
3.8k
タップルのサービス特性に合わせた設計方針を考える
kazumanagano
0
220
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
140
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
8
4.8k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
120
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
4
8.7k
App Size Optimization への挑戦
kazumanagano
1
1.4k
無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス
kazumanagano
2
2.4k
モノレポで複数アプリを リリースする場合の運用戦略
kazumanagano
0
3.9k
Other Decks in Programming
See All in Programming
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
880
TROCCOで実現するkintone+BigQueryによるオペレーション改善
ssxota
0
120
Claude Codeセッション現状確認 2026福岡 / fukuoka-aicoding-00-beacon
monochromegane
3
380
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
18
9.8k
maplibre-gl-layers - 地図に移動体たくさん表示したい
kekyo
PRO
0
140
手戻りゼロ? Spec Driven Developmentとは@KAG AI week
tmhirai
1
150
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
1
400
CSC307 Lecture 13
javiergs
PRO
0
310
Rails Girls Tokyo 18th GMO Pepabo Sponsor Talk
yutokyokutyo
0
190
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
390
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
180
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
180
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
72
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
230
Un-Boring Meetings
codingconduct
0
220
The World Runs on Bad Software
bkeepers
PRO
72
12k
A Soul's Torment
seathinner
5
2.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
WCS-LA-2024
lcolladotor
0
470
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
130
Statistics for Hackers
jakevdp
799
230k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.1k
Balancing Empowerment & Direction
lara
5
930
Transcript
@kazuma_nagano / nade 2023/03/15 CA.Swift Github Actions self-hosted runners のすゝめ
自己紹介 なで( @kazuma_nagano ) 2019 サイバーエージェント 入社 タップル iOSチームリーダー 2
登壇中の疑問、感想等 #ca_swift にてツイートしていただけると 大変喜びます🙇 3
アウトライン 1. ネイティブにおける CI / CDの主な役割 2. ビルドコスト増加に伴うリスク 3. Github
Actions self-hosted runners の紹介 4. Bitrise → Github Actions への移行 5. まとめ 4
ネイティブにおける CI / CDの主な役割 5
ネイティブにおける CI / CD の主な役割 自動テスト( CI / Continuous Integration
) アプリ配布( CD / Continuous Delively ) 6 Build Test Prepare Feedback Build Submit Store Prepare Distribute
環境構築はキャッシュを駆使してチューニング可能 自動テスト( CI / Continuous Integration ) アプリ配布( CD /
Continuous Delively ) 7 Build Test Prepare Feedback Build Submit Store Prepare Distribute タップルにおけるビルド時間(2023)
参考文献 8 https://bitrise.io/blog/post/tune-your-bitrise-workflows-using-cache-in-steps
(主題)どちらもビルドで時間的コストの大半を使う 自動テスト( CI / Continuous Integration ) アプリ配布( CD /
Continuous Delively ) 9 Build Test Prepare Feedback Build Submit Store Prepare Distribute ビルドコストは増 加していく
ビルドコスト増加に伴うリスク 10
ビルドコスト増加に伴うリスク 1. ビルド時間は年々増加していく 2. 実行時間に準じた課金体系の標準化 11
1. ビルド時間は年々増加していく 12
13 9年弱のコードベース 成果物のキャッシュされていな いライブラリ群 Kotlin Multiplatform Mobile ビルド時間は年々増加していく タップルにおけるビルド時間
14 ビルド時間は年々増加していく タップルにおけるビルド時間(2023)
15 ビルド時間は年々増加していく タップルにおけるビルド時間(2025?) ?
1. 実行時間に準じた課金体系の標準化 16
実行時間に準じたクレジットベースのプラン 17 Bitrise https://bitrise.io/pricing
実行時間に準じたクレジットベースのプラン 18 Circle CI https://circleci.com/ja/pricing/
実行時間に準じたクレジットベースのプラン 19 Github Actions(GitHub-managed Standard) https://github.co.jp/pricing#compare-features
実行時間に準じたクレジットベースのプラン 20 Xcode Clound https://developer.apple.com/jp/xcode-cloud/
実行時間に準じたクレジットベースのプラン • iOS向けSaaSはどこもビルド時間ごとの課金体系が主流で値上げ傾向 • プランごとのクレジットがなくなるとCIが止まってしまうことも • チームの拡大や生産性の向上により線形に価格上昇していく • マシンスペックに応じて実行時間ごとの価格が上昇していく ◦
一般的にクレジット消費が2xになっても実行時間は1/2にはならない 21 ビルド時間の増加がプロダクト開発の潜在的なリスクになっている
Github Actions Self-hosted Runnersの紹介 22
Github Actions self-hosted runner の紹介 • 自分達で管理する実マシンやAWS EC2などの仮想マシンをGithub Actionsの実 行マシンに指定できる機能
• 基本的にはGithub が提供するself-hosted runner アプリケーションを実行できる マシンであればどのマシンでもOK • Github Actions上からのインターフェースはほぼ変わらない • 実行時間の制限はほぼなく(35日)、マシンスペックも好きなものを選べる 23
Github Actions self-hosted runner の紹介 ビルド実行時の実行マシンのラベル指定のみ 24 name: '[iOS] Test
App' on: workflow_dispatch: jobs: build: runs-on: - self-hosted - macOS timeout-minutes: 120
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
グループのインフラチームの管理する myshoes を通して 物理マシンを利用 Cyberagent myshoes の 紹介 26 https://speakerdeck.com/whywaita/cyberagent-oss-cicd-myshoes-cicd2021
Bitrise → Github Actions への移行 27
今日話さないこと • Bitrise、Github Actions の特徴、比較 • 実際のワークフローの構築の仕方 • それぞれのコストの話 28
Bitrise → Github Actions への移行 • 基本的な CI / CD
に必要な機能においては代替手段あり ◦ キャッシュ管理(CocoaPods, Gem, Ruby, Java, Gradle, SwiftPM) ◦ スケジューリングビルド • 事前にワークフローの実行をfastlaneにまとめておくことで容易に移行可能 ◦ 証明書管理 → fastlane match、ビルドコマンド → fastlane gym • Bitriseにしかない機能は代替案を用意する必要あり 29
Bitriseにしかない機能の代替案を用意する タップルで利用していたBitriseにしかない機能 • Sandbox Tester 作成などの2FAが必要なワークフロー • SlackからのCIの実行 • アプリのQRコード配布
30
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
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
Bitriseにしかない機能の代替案を用意する 33 SlackからのCIの実行 Bitriseの Slackからのwebhook実行 + Slackのワークフロー • 簡単に誰でもアプリが配布できるように https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 34 SlackからのCIの実行(要実装) Slack App + Github Actions API にて実装することで代替(In
progress) https://api.slack.com/apps
Bitriseにしかない機能の代替案を用意する ビルド済みのipaの端末へのダウンロードURLを Bitriseが生成してくれる機能 施策テスト時など、特定のブランチのアプリを渡してや りとりする際に利用されていた 35 アプリのQRコード配布
Bitriseにしかない機能の代替案を用意する 36 アプリのQRコード配布 → Firebase App Distribution に完全移行 Firebase App
Distribution • Firebase 内のベータ版アプリ配布の機能 • 利用は完全無料 • Fastlane用の実行プラグインもある • Googleアカウントごとに制御可能 タップルでも以前から併用していたがこれを機に完全移行 https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 37 アプリのQRコード配布 → Firebase App Distribution に完全移行 いつの間にかアプリごとのURLが取得できるようになっていた https://firebase.google.com/products/app-distribution
Bitriseにしかない機能の代替案を用意する 38 アプリのQRコード配布 → Firebase App Distribution に完全移行 Q: アプリ配布時にダウンロードURLが取得できる?
https://firebase.google.com/products/app-distribution
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
Bitriseにしかない機能の代替案を用意する 40 アプリのQRコード配布 → Firebase App Distribution に完全移行 fastlaneでのipaのアップロード後、アプリURL(+QR)をSlackに投稿
実際のGithub Actions 移行後のパフォーマンス 41
実際のGithub Actions 移行後のパフォーマンス 42 30min → 9.5min と300%削減🎉(フルキャッシュ状態)
実際のGithub Actions 移行後のパフォーマンス 43 • Bitriseで価格帯からスペックの良いマシンが利用できていなかったことによるマシン スペック差が大きそう • Git CloneがBitrise上よりGithub
Action上のほうが2min早いことも • キャッシュの管理がBitriseより柔軟 https://firebase.google.com/products/app-distribution 30min → 9.5min と300%削減🎉
まとめ 44
まとめ • iOSのCI / CD SaaSは実行時間ベースの課金体系が主流になっており、価格が上 がってきている • Github Actions
self-hosted runners を利用することで実行時間や消費クレジッ トを機にすることのないCI / CD 環境を構築できる • Bitrise → Github Actions への移行は基本的には可能 • 高いマシンスペックを活用することで大幅にCIの実行時間が短縮できる場合も 45
ありがとうございました! #ca_swift にて感想お待ちしてます🙇 46