Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GitHub Actionsが他のCIサービスと比較してできることできないこと
Search
Kenta Kase
October 16, 2019
Programming
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub Actionsが他のCIサービスと比較してできることできないこと
GitHub Actions Meetup Tokyo β
https://gaugt.connpass.com/event/147220/
Kenta Kase
October 16, 2019
More Decks by Kenta Kase
See All by Kenta Kase
GitHub Actionsオタクによるセルフホストランナーのアーキテクチャ解説
kesin11
0
430
GitHubの新機能とGHESのリリースノートの対応をまとめ続けている話
kesin11
0
220
CircleCIでLayer Cachingを使わずにdocker buildを高速化する
kesin11
3
2.3k
CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボードを構築した話
kesin11
7
11k
TypeScriptから使いやすいFirestore-simpleを紹介します(2020年版)
kesin11
3
2.3k
iOSアプリのリジェクトリスクを早期に発見するための取り組み
kesin11
4
18k
BitriseでFastlane/Gradleプラグインの統合テスト
kesin11
0
3.5k
Firebase Test Labの紹介
kesin11
4
1.7k
Cloud Functions × BigQuery
kesin11
5
2.5k
Other Decks in Programming
See All in Programming
Kotlinの15年とServer-Side Kotlin
n_takehata
1
190
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
280
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
1.2k
Performance Optimization With LLMs
xleitix
0
240
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
610
ChromeでローカルLLM
ryu1013
0
190
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
180
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
140
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
SODA - FACT BOOK(JP)
sodainc
1
40k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
4
3k
Featured
See All Featured
Visualization
eitanlees
153
17k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Code Review Best Practice
trishagee
74
20k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
660
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
30 Presentation Tips
portentint
PRO
1
460
Are puppies a ranking factor?
jonoalderson
2
4.1k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Mobile First: as difficult as doing things right
swwweet
225
10k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
560
Technical Leadership for Architectural Decision Making
baasie
3
630
Transcript
GitHub Actionsが他のCIサービスと⽐較してできることできないこと GitHub Actions Meetup Tokyo β (10/16) @Kesin11
⾃⼰紹介 @Kesin11 (GitHub/Twitter) DeNA SWETグループ 開発効率向上を⽬的として、テストやCI/CDの調査・事業 部サポートなど (おそらく普通よりは)CIマニアの気がある わりと早期に運良くyaml版を使えるようになっていたので記 事を書いていました
新GitHub ActionsはCIに使えるか 2 2
はじめに この発表はCI/CDの中級者を対象に考えています 他のCIサービスは⼀通り触ったことがある前提 CircleCI, TravisCI, Google Cloud Build もし間違ったことを⾔っていたらTwitterや懇親会のときに教 えてもらえると嬉しいです
GitHub Actionsはまだβなので正式リリース時には状況が変 わってる可能性が⾼いです 3 3
ビルドキャッシュとアーティファクト
GitHub Actionsの現在 ビルドキャッシュ: 不可能 node_modules(npm), vendor(bundler)など 依存モジュールは毎回ダウンロード&ビルドやりなおし アーティファクト保存: 可能 ビルドしたバイナリなどをダウンロードできるようにする
5 5
6 6
CircleCIの機能との対応表 CircleCI GitHub Actions save_cache - restore_cache - store_artifact actions/upload-artifact
persist_to_workspace actions/upload-artifact attach_workspace actions/download-artifact 7 7
キャッシュの種類について 前のworkflow実⾏から引き継げるか、今のworkflow内だけ かが⼤きな違い GitHub Actionsでは 前のworkflowのキャッシュやアーティファクトは使えない アーティファクトとして回収すれば同じworkflow実⾏内で あればjob間でやりとりできる 8 8
ビルドキャッシュが使えないことは問題か? ビルドに時間がかからないライブラリ系なら問題なさそう jobが多くても並列数で殴ればトータル時間は変わらない 依存モジュールが多い、ネイティブビルドが多い場合はネッ クになる iOS、Androidアプリなどは厳しそう 9 9
マトリックスビルド
マトリックスビルド CIとしてのGitHub Actionsの⽬⽟ 今までTravisCIがOSS界隈のデファクトであった⼤きな理由 のはず 11 11
TravisCI 12 12
GitHub Actions 13 13
TravisCIとの違い ⾔語バージョンを選択するデファクトなツールが使えない rvm, nvmなど actions/setup-xxxx js/tsでそれぞれの⾔語ごとに実装されている nodeの場合はバイナリをダウンロード、PATH通して、 undocumentなキャッシュ領域に保存していた 14 14
問題点 バージョン指定の選択が独⾃実装 latestとかstableとかltsのようなエイリアスが使えない ⾞輪の再発明では? とはいえ、⼤抵の場合はそんなに問題ではなさそう setup-xxxxが存在していない⾔語はバージョン切り替えられ なさそう 15 15
実⾏環境について
VMとコンテナ 今どきのCIサービスはVMとコンテナが混在している CircleCI 基本はコンテナ。 machine: true やmacの場合はVM TravisCI 基本はVM Cloud
Build 全部コンテナ(ちょっと特殊) GitHub Actions 基本はVM。Linuxの場合は設定次第でコンテナにもできる 17 17
stepごとの実⾏環境 CIサービスによってはjob単位ではなくて、step単位で実⾏環境を変えられる CircleCI 基本的にはできない。remote dockerを有効化すれば docker runで実質可能? Cloud Build 元々step毎に必ずコンテナを指定させるスタイル
GitHub Actions 併⽤されるのが基本 18 18
GitHub Actionsの実⾏環境 jobs: job: runs-on: ubuntu-latest steps: # VM 上で実⾏される
- run: env # VM かコンテナかは外部のaction の種類に依存する - uses: actions/checkout@v1 # コンテナ上で実⾏される # with.args で任意のコマンドを実⾏できる - uses: docker://node:10 with: args: echo "foo bar"
「基本コンテナ上で実⾏」に切り替える job.container.imageで使うコンテナを指定 つまり挙動として基本コンテナのCircleCIに近くなる jobs: job: runs-on: ubuntu-latest container: image: "node:12"
steps: # コンテナ上で実⾏される - run: node --version
マトリックスビルドとコンテナ
お気づきでしょうか? 22 22
マトリックスビルド + containerとした場合にどうなる? 23 23
試してみた jobs: job: strategy: matrix: container: ["ruby:2.4", "ruby:2.5", "ruby:2.6"] runs-on:
ubuntu-latest container: image: ${{ matrix.container }} steps: - uses: actions/checkout@v1 - name: "ruby version" run: ruby --version
25 25
マトリックスビルド + container github.com/Kesin11/danger-textlint/pull/16 マトリックスで指定したイメージ上でテストが実⾏でき る!! actions/setup-xxxxに頼る必要がない 多分他のCIで同じことができるものはないので唯⼀無⼆ 各⾔語の公式イメージ上で実⾏できる安⼼感 OSS⽤途としては最⾼では
ただしLinux上での実⾏に限る 26 26
その他細かいこと1 Slack通知 サポート無し。⾃⼒でやる push, pull-req以外のwebhookトリガー 可能。GitHub Actionsならでは 新たなpushで溜まったキューのキャンセル CircleCIだとAuto-cancel redundant
builds ない。正式版になって課⾦されるようになると困るかも rerunがworkflow単位 TravisCIのようにマトリックスの⼀部だけrerunできない 27 27
その他細かいこと2 Docker in Docker CircleCIのような特殊なことをせずとも可能 job.container.imageで docker を指定して、 docker build
などはそのまま動く docker buildのキャッシュ CircleCIのlayer cache、Cloud BuildのKanikoのような 便利な仕組みはない 同じくβのGitHub Package Resistoryと --cache-from を組み合わせるぐらい? 28 28
まとめ ビルドキャッシュは無い(少なくとも今は) マトリックスビルドは便利 マトリックスビルド + containerは唯⼀無⼆ まだβなので、より便利になると信じている ⾊々実験した記録のリポジトリ github.com/Kesin11/github_actions_matrix_js_sandbox 29
29 Slide created by Marp(marp.app) Slide created by Marp(marp.app)