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が他のCIサービスと比較してできることできないこと
Search
Kenta Kase
October 16, 2019
Programming
1
1.5k
GitHub Actionsが他のCIサービスと比較してできることできないこと
GitHub Actions Meetup Tokyo β
https://gaugt.connpass.com/event/147220/
Kenta Kase
October 16, 2019
Tweet
Share
More Decks by Kenta Kase
See All by Kenta Kase
GitHub Actionsオタクによるセルフホストランナーのアーキテクチャ解説
kesin11
0
270
GitHubの新機能とGHESのリリースノートの対応をまとめ続けている話
kesin11
0
120
CircleCIでLayer Cachingを使わずにdocker buildを高速化する
kesin11
3
2k
CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボードを構築した話
kesin11
7
9.8k
TypeScriptから使いやすいFirestore-simpleを紹介します(2020年版)
kesin11
3
2k
iOSアプリのリジェクトリスクを早期に発見するための取り組み
kesin11
4
17k
BitriseでFastlane/Gradleプラグインの統合テスト
kesin11
0
3.1k
Firebase Test Labの紹介
kesin11
4
1.5k
Cloud Functions × BigQuery
kesin11
5
2.2k
Other Decks in Programming
See All in Programming
コードを読んで理解するko build
bells17
1
110
TCAを用いたAmebaのリアーキテクチャ
dazy
0
200
SwiftUI Viewの責務分離
elmetal
PRO
2
280
コミュニティ駆動 AWS CDK ライブラリ「Open Constructs Library」 / community-cdk-library
gotok365
2
250
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
260
Rubyと自由とAIと
yotii23
6
1.8k
Ça bouge du côté des animations CSS !
goetter
2
150
Datadog DBMでなにができる? JDDUG Meetup#7
nealle
0
150
読まないコードリーディング術
hisaju
0
100
複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方
tc3jp
0
120
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
2.5k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
18
4.1k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Gamification - CAS2011
davidbonilla
80
5.2k
Making Projects Easy
brettharned
116
6k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Done Done
chrislema
182
16k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Optimizing for Happiness
mojombo
376
70k
Agile that works and the tools we love
rasmusluckow
328
21k
Faster Mobile Websites
deanohume
306
31k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
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)