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
430
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
4
2k
タップルのサービス特性に合わせた設計方針を考える
kazumanagano
0
79
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
60
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
7
3.9k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
41
よりUXに近いSLI・SLOの運用による可用性の再設計
kazumanagano
4
8.5k
App Size Optimization への挑戦
kazumanagano
1
1.2k
無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス
kazumanagano
2
2k
モノレポで複数アプリを リリースする場合の運用戦略
kazumanagano
0
3.4k
Other Decks in Programming
See All in Programming
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
140
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
3
2.1k
ATDDで素早く安定した デリバリを実現しよう!
tonnsama
1
1.8k
traP の部内 ISUCON とそれを支えるポータル / PISCON Portal
ikura_hamu
0
180
.NETでOBS Studio操作してみたけど…… / Operating OBS Studio by .NET
skasweb
0
120
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
580
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
190
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
230
php-conference-japan-2024
tasuku43
0
430
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Side Projects
sachag
452
42k
Thoughts on Productivity
jonyablonski
68
4.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
KATA
mclloyd
29
14k
Facilitating Awesome Meetings
lara
51
6.2k
How GitHub (no longer) Works
holman
312
140k
GitHub's CSS Performance
jonrohan
1030
460k
VelocityConf: Rendering Performance Case Studies
addyosmani
327
24k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
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