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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
15年目のiOSアプリを1から作り直す技術
teakun
1
590
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
470
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
190
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
380
株式会社 Sun terras カンパニーデック
sunterras
0
2k
CSC307 Lecture 15
javiergs
PRO
0
210
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
310
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
190
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
240
CSC307 Lecture 11
javiergs
PRO
0
580
atmaCup #23でAIコーディングを活用した話
ml_bear
4
730
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
0
380
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
A Modern Web Designer's Workflow
chriscoyier
698
190k
Building Applications with DynamoDB
mza
96
6.9k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Designing Powerful Visuals for Engaging Learning
tmiket
0
260
Unsuck your backbone
ammeep
672
58k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
460
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
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