11.3K Views
August 05, 23
スライド概要
【現地/オンライン配信】GitHub dockyardコミュニティ 竣工イベント!
https://github-dockyard.connpass.com/event/289714/
渋谷のWeb系企業で働くエンジニア 最近はテストや自動化関係に興味があります
最近のGitHub Actionの 気になるアップデートの紹介 GitHub dockyardコミュニティ 竣工イベント! サイボウズ株式会社 開発本部 生産性向上チーム 加瀬 健太(@Kesin11)
自己紹介 ▌加瀬 健太(@Kesin11) ▌経歴 ◼ ~2023/06 株式会社DeNA SWET第二グループ @Kesin11 ◼ 2023/07 サイボウズ株式会社 生産性向上チーム @Kesin11 ▌日課はgithub.blog/changelogを見ること @kesin11.bsky.social
GitHub Actions関連機能とGHESリリースノートの対応表 ▌↑というタイトルでzennに公開中 ▌数ヶ月に1度ぐらいのゆるいペースで 随時加筆 ▌現在v3.2からv3.9(最新)まで
Productivity Weekly ▌「1週間の間に発見された開発者の 生産性向上に関するネタを共有する 会」を社内で開催した内容をzennで 公開 ▌100回を突破して現在118回!
主に2023年のGitHub Actions関連のアップデート紹介 + それらを活用したGitHub Actionsの中級ぐらいの使い方
目次 ▌GitHub Actions for VS Code ▌Variables(vars) ▌OIDC ▌キャッシュ ▌Larger runner ▌セルフホストランナー
GitHub Actions for VS Code 2023-03-28 登場 https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-github-actions
GitHub Actions for VS Code 2023-03-28 登場 ▌Workflow yamlのバリデーションをリアルタイムでしてくれる ◼ 例:withのパラメータのtypo検知(restore-keysが正しい)
GitHub Actions for VS Code ◼ Actionsの実行履歴 ◼ SecretsやVariablesの確認 2023-03-28 登場
GitHub Actions for VS Code 2023-03-28 登場 ◼ workflow_dispatch可能なジョブはエディタ内からトリガー可能
Variables(vars)
Variables(vars) 2023-01-10 登場 ▌GitHub Actionsで使える変数 ◼ Repository, Repositoryのenv、Organizationで設定可能 ◼ ${{ vars.FOO }}のように呼び出せる
Variables(vars) 2023-01-10 登場 ◼ Secretsとの違い ◼ Repository, Repositoryのenv、Organizationで設定できるのは同じ Secrets Variables 設定画面で中身を確認可能か 不可能 可能 ジョブのログで値がマスクされるか マスクされる マスクされない APIによる登録・変更 可能だが、ローカルで暗号化してから APIに投げるので難易度が高い Create or update a repository secret 可能。name, valueのペアでAPIを投 げるだけ Create a repository variable ◼ ワークフロー共通で利用したい && 秘匿ではない ならば今後はvarsで十分
OpenID Connect(OIDC)
OpenID Connect(OIDC)認証 ▌(GitHub Actions向けにざっくり言うと)パスワードやJSONなどの長 命なシークレットを使わずにAWSやGCPの認証を行える仕組み ▌今まではCI/CDから本番デプロイなどを行うために強い権限のアカウント のシークレットも登録が必要だった ◼ 最近は悪意ある攻撃対象としてCIのシークレット狙われている ◼ 対策としてローテーションを頻繁に行うなどがあるがなかなか難しい ▌OIDCは短命シークレットを都度発行する仕組みなので比較的安全
OpenID Connect(OIDC)認証 ▌AWSの場合はrole、regionなどの 情報を入れるだけ ▌permissionsにid-token:writeが 必要 ◼ permissionsは1つでも設定する と色々権限があるデフォルトが使え なくなる ◼ contentsなどの権限を芋づる式 に追加するのはちょっと面倒 元コード:https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services
OpenID Connect(OIDC)認証 ▌クラウドプロバイダー側にもOIDC用のリソースを作成する必要がある ◼ 主要なクラウドプロバイダーはGitHubにドキュメントが用意されている ◼ 現在では解説記事も多く出回っているので何とかなるはず ▌Terraformなどでコード化しておけば次回以降はきっと楽
キャッシュ
Q ビルドを速くするために重要なことは?
A ビルドをしない!!
A ビルドをしない!! 無駄なビルドを極力行わない 前回ビルドしたときの成果物をなるべく使いまわす
今回は主に依存モジュールの話 ビルドキャッシュやコンパイルキャッシュなどはまた今度
actions/setup系による依存モジュールのキャッシュ ▌公式のactions/setup系がオプション1つで キャッシュしてくれるように ▌ほとんどのケースで自前でactions/cacheを使う 必要はなくなった ◼ キャッシュのキーなどはいい感じやってくれる ▌actions/setup-go@v4(2023-03-24)は cache: trueがデフォルト挙動になったので一番 先鋭的 https://github.com/actions/setup-nodeのREADME
actions/[email protected] 2022-12-21 リリース ▌actions/cache/restore, actions/cache/saveが追加 ◼ actions/cacheは呼び出し時にrestore, ジョブの最後に自動save ◼ actions/cache/restore, actions/cache/saveは任意の場所 で個別に実行可能 ▌他のCIサービスではrestoreとsaveは別々なことが多く、同様の使い勝 手が可能になった ▌複雑なビルドでキャッシュのタイミングを制御したくなったら思い出そう
(付録)docker buildxのキャッシュ ▌docker/build-push-actionはレイヤーキャッシュの置き場として GitHub Actionsのキャッシュを使える https://docs.docker.com/build/ci/github-actions/cache/#github-cache
(付録)docker buildxのキャッシュ ▌実はbuildx自体がサポートしているので自分でdocker buildx build コマンドを直接実行する場合でも可能 ◼ GitHub Actionsだけ優遇されてる感があってちょっとズルい ▌dockerのキャッシュ事情はbuildx(buildkit)でかなり進化している ◼ BUILDKIT_INLINE_CACHE=1の時代で止まっている場合は久 しぶりにドキュメントを見てみるのをオススメ ◼ https://github.com/moby/buildkit#cache
Larger runner
キャッシュも頑張ったが ビルド時間はこれ以上短縮できない!
ぶっちゃけ 難しいテクニック無しにビルドを速くする方法ないの!?
“金”の弾丸ができました 💰💰💰
Larger runner 2023-06-21 GA ▌スペックと料金(Linux) vCPUs Memory Storage Per-minute rate(USD) 2 4GB 14GB $0.008 4 16GB 150GB $0.016 8 32GB 300GB $0.032 16 64GB 600GB $0.064 32 128GB 1200GB $0.128 64 256GB 2040GB $0.256 ▌値段はCPU・メモリにきれいに比例しているので違和感なし 表は7/27時点での以下のドキュメントをまとめたもの https://docs.github.com/en/actions/using-github-hosted-runne rs/about-github-hosted-runne rs#supported-runners-and-hardwa re-resources https://docs.github.com/en/actions/using-github-hosted-runne rs/about-la rger-runners#machine-sizes-for-larger-runners https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates
mac XLランナー 2023-04-23 public beta ▌スペックと料金(macOS) vCPUs Memory Storage Per-minute rate (USD) Standard 3 14GB 14GB $0.08 XL 12 30GB 14GB $0.016 ▌こちらも値段はCPU・メモリにきれいに比例しているので違和感なし ▌どちらもIntel CPU(Apple Siliconはよ・・・) 表は7/27時点での以下のドキュメントをまとめたもの https://docs.github.com/en/actions/using-github-hosted-runne rs/about-github-hosted-runne rs#supported-runners-and-hardwa re-resources https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions#per-minute-rates
Larger runnerとmac XLランナーの細かい話 ▌無料枠の対象外なので注意 ◼ publicでもお金がかかる ◼ privateの無料枠の対象外 ▌LinuxのLarger runnerは固定IPを割り当てることができる ◼ 自社NWに通信させたい場合にFWで許可するという用途を想定 ◼ 試してみたらサブネットマスク/28のIPが割り当てられた ◼ /28なのでIPは16個のレンジ
(付録)Larger runner試してみた ◼ 作成画面
(付録)Larger runner試してみた ◼ 少し待つとReadyになる
(付録)Larger runner試してみた ◼ Standard(いつもの)は2CPU ◼ IntelのXeonらしい
(付録)Larger runner試してみた ◼ Largerは設定どおり4CPU ◼ AMDのEPYCらしい ◼ (普段気にしたことはなかったです が、もしかしたら今までもCPUベン ダーが変わっていた可能性がある のかも?)
セルフホストランナー
セルフホストランナー ▌ビルドマシンに対する全ての要望を叶えうる手段 ◼ 自社ネットワークに接続させたい ◼ CIの費用が高すぎるのでオンプレを活用したい ◼ ライセンスなどの特殊な事情があるツールを使いたい ◼ ArmのLinuxを使いたい ◼ Apple SiliconのmacOSを使いたい
セルフホストランナーをシンプルに建てる方法 ▌OrganizationかRepositoryの設定画面のActions -> Runners
セルフホストランナーをシンプルに建てる方法 ▌コマンドを上から順に実行するだけでセルフホストランナーとして登録可能
セルフホストランナーをシンプルに建てる方法 ▌自分のチームで1-2台程度建てるだけならOK ▌実際にはrun.shで起動するよりはsvc.sh installの方がオススメ ◼ OSごとのサービスに登録してくれるラッパースクリプト ◼ マシンを再起動しても自動でランナープロセスが立ち上がってくれる ◼ 公式ドキュメント ◼ セルフホストランナーアプリケーションをサービスとして設定する
組織横断の規模で提供するには幅広いインフラ知識が必要 ▌スケール性とセキュリティ面で考えることがたくさんある 引用:CI/CD Test Night #6 GitHub Actionsオタクによるセルフホストランナーのアーキテクチャ解説
組織横断の規模になると幅広いインフラ知識が必要 ▌CI/CD Test Night #6で発表したので見てほしい! CI/CD Test Night #6 GitHub Actionsオタクによるセルフホストランナーのアーキテクチャ解説
セルフホストランナーを構築するOSS
セルフホストランナー構築するOSS ▌actions/actions-runner-controller(ARC) 2023-06-30 GA ◼ k8上にオートスケールするセルフホストランナーのインフラを構築 ◼ コミュニティから生まれてGitHub公式に移管された ◼ 04/26に開催された Kubernetes Meetup Tokyo #57 で コミュニティ時代からauthorの @mumoshu さんが登壇 ◼ スライドも動画も公開されているので興味ある人はぜひ
セルフホストランナー構築するOSS ◼ philips-labs/terraform-aws-github-runner ◼ AWSでオートスケールするセルフホストランナーのインフラを構築する Terraform module ◼ 生産性向上チームではこちらを利用して社内にランナーを提供 ◼ ググると他社事例もそこそこあるようです
セルフホストランナー構築するOSS ◼ @miyajanが過去に紹介したのでこちらもぜひ! CI/CD Test Night #6 philips-labs/terraform-aws-github-runnerによるGitHub Actions セルフホストランナーの大規模運用 Cybozu Inside Out 2022/12/01 philips-labs/terraform-aws-github-runner でオートスケールするセルフホストランナーの構築・運用
その他のセルフホストランナー事例 ▌日本内でも各社が独自に色々工夫されていますが今日は割愛! ▌前職で3社をゲスト招待してCI/CD Test Night #6を開催してました ▌スライド、アーカイブ動画も公開されているのでぜひ
まとめ
まとめ ▌ VSCode Extension ◼ 今すぐ試しましょう ▌ Variables(vars) ◼ 暗号化、ログマスクが不要ならSecretsの代替として便利 ▌ OIDC ◼ 最近のセキュリティ事情より推奨 ▌ キャッシュ ◼ 久しぶりにactions/setup系のドキュメントを読んでみて ▌ Larger runner / セルフホストランナー ◼ 奥が深くて楽しい沼です ◼ 仕事として楽しみたい方を募集しております!