$30 off During Our Annual Pro Sale. View Details »

self-hosted runnerと actions/cache の噛み合わせが悪かった件 #githubactionsmeetup

whywaita
PRO
September 25, 2023

self-hosted runnerと actions/cache の噛み合わせが悪かった件 #githubactionsmeetup

whywaita
PRO

September 25, 2023
Tweet

More Decks by whywaita

Other Decks in Technology

Transcript

  1. self-hosted runnerと


    actions/cache の噛み合わせが悪かった件
    株式会社サイバーエージェント CIU Development div

    Nakanishi Kento @whywaita


    GitHub Actions Meetup Tokyo #
    2
    @ サイボウズ株式会社 2023/09/21

    View Slide

  2. Nakanishi Kento / whywaita
    • 株式会社サイバーエージェント 2019新卒


    • 業務: CAグループ向けプライベートクラウド開発


    • GitHub Actions ベースCIサービス

    (Managed myshoes) PM


    • 社内向け IaaS 開発者


    • 趣味: ポーカー / XREAL Air / ⾃宅インフラ
    ISUCON本買ってね! #isucon →

    View Slide

  3. 本⽇
    • スライド: 48枚


    • 発表時間: 10分 = 600秒


    • 12.5秒/枚!!!!!!
    3

    View Slide

  4. 周辺知識
    4

    View Slide

  5. action/cache
    • https://github.com/actions/cache


    • 依存ライブラリのファイルをキャッシュす
    ることでCI時間を短くするモジュール


    • 任意のファイルを保存できる



    1
    0
    GB / repo まで無料
    5

    View Slide

  6. self-hosted runner
    • ↔ GitHub-hosted runner


    • ⾃前のインフラでrunner起動するやつ


    • ⾃宅 社内サーバ プライベートクラウド...


    • ネットワーク CPU メモリなど嬉しい要素
    6

    View Slide

  7. [PR] whywaita/myshoes
    • Auto-scaling VirtualMachine runner 🏃
    for GitHub Actions


    • 様々なクラウドでrunnerを作成可能


    • https://github.com/whywaita/myshoes
    7

    View Slide

  8. [PR] Cycloud
    8
    •Cy(berAgent)cloud


    •各種サービスの提供


    •IaaS / KaaS / PaaS / ML Platform


    •Cycloud-hosted runner (myshoes)

    View Slide

  9. 9
    https://www.cyberagent.co.jp/news/detail/id=
    2 84 8
    4

    View Slide

  10. 10
    https://isucon.net/archives/
    55 5
    3 3
    0 13
    .html

    View Slide

  11. [PR] Cycloud-hosted runner
    • Cycloud VMをStadiumとしGitHub-hostedよりも安価に
    提供


    • LXDイメージはGitHub-hostedとほぼ同じイメージを利⽤


    • https://github.com/whywaita/actions-runner-images-
    lxd


    • runnerスペック 2Core
    20
    GB ~
    16
    Core
    1
    60
    GB
    11

    View Slide

  12. [PR] 規模感
    • Stadium台数: 約80台 (
    1
    6
    c
    160
    gb)


    • 導⼊数: エンジニアの50% が利⽤!


    • アカウント数ベース


    • Linux版GAから: 1年8ヶ⽉


    • 1⽇の実⾏job数: 約1万個


    • 常時500〜700インスタンスぐらい
    12

    View Slide

  13. 13
    https://speakerdeck.com/whywaita/evolution-myshoes-cicd-test-night-
    6

    View Slide

  14. 14
    Internal actions/cache

    View Slide

  15. GitHub owned by Microsoft
    • GitHub Actionsのバックエンドは

    (現状)ほぼAzure Pipelines


    • 関連サービスもAzureの製品を⽤いて実装
    されている(ことが多い)
    15

    View Slide

  16. GitHub owned by Microsoft
    trigger:
    - main
    pool:
    vmImage: 'ubuntu-latest'
    steps:
    - task: Maven@4
    inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    jdkArchitectureOption: 'x64'
    16
    https://learn.microsoft.com/ja-jp/azure/devops/pipelines/customize-pipeline?view=azure-devops

    View Slide

  17. ぽい
    17

    View Slide

  18. GitHub owned by Microsoft
    • (whywaita 調べ)


    • GitHub Actionsのバックエンドは

    (現状)ほぼAzure Pipelines


    • 関連サービスもAzureの製品を⽤いて実装
    されている(ことが多い)
    18

    View Slide

  19. GitHub owned by Microsoft
    • (whywaita 調べ)


    • GitHub Actionsのバックエンドは

    (現状)ほぼAzure Pipelines


    • 関連サービスもAzureの製品を⽤いて実装
    されている(ことが多い)
    19

    View Slide

  20. actions/cache internal
    • actions/cache は Azure Blob storage


    • それっぽい機能が実装されている


    • CDNっぽく配信するとか


    • GETしたら Lifecycle 伸ばすとか
    20

    View Slide

  21. actions/cache internal
    21
    runner
    Azure blob storage

    View Slide

  22. 🙅
    22

    View Slide

  23. actions/cache internal
    23
    runner
    Azure blob storage

    View Slide

  24. actions/cache internal
    24
    runner
    Azure blob storage
    GitHub Cache API

    View Slide

  25. actions/cache internal
    • GitHub Cache API (仮称)


    • 各種情報を確認しているのでは?と推測


    • リポジトリ毎の保存ファイル容量


    • アクセス状態


    • etc etc...
    25

    View Slide

  26. - name: Cache Primes
    id: cache-primes
    uses: actions/cache@v3
    with:
    path: prime-numbers
    key: ${{ runner.os }}-primes
    26

    View Slide

  27. Con
    fi
    g less
    27

    View Slide

  28. 28
    Meets self-hosted runner

    View Slide

  29. actions/cache internal
    29
    runner
    Azure blob storage
    GitHub Cache API

    View Slide

  30. actions/cache internal
    30
    GitHub-hosted
    Azure blob storage
    GitHub Cache API

    View Slide

  31. actions/cache internal
    31
    self-hosted
    Azure blob storage
    GitHub Cache API

    View Slide

  32. - name: Cache Primes
    id: cache-primes
    uses: actions/cache@v3
    with:
    path: prime-numbers
    key: ${{ runner.os }}-primes
    32
    同じcon
    fi
    gが利⽤可能

    View Slide

  33. actions/cache internal
    33
    🏠
    self-hosted
    Azure blob storage
    GitHub Cache API
    GitHub-hosted
    Azure blob storage
    GitHub Cache API

    View Slide

  34. actions/cache internal
    34
    GitHub-hosted
    Azure blob storage
    GitHub Cache API
    self-hosted
    Azure blob storage
    GitHub Cache API
    同じ or 近い

    View Slide

  35. actions/cache internal
    35
    GitHub-hosted
    Azure blob storage
    GitHub Cache API
    self-hosted
    Azure blob storage
    GitHub Cache API
    遠い

    View Slide

  36. Benchmark
    36
    https://github.com/google/wireit/issues/
    239

    View Slide

  37. 遠すぎ🥺
    37

    View Slide

  38. @actions/cache (= library)
    • ライブラリとして内部的に組み込み可能


    • actions/setup-go@v
    4

    • Dependency cache is default enable


    • ruby/setup-ruby


    • rubyのキャッシュが難しく当初より実装
    38

    View Slide

  39. 避けようがない🥺
    39

    View Slide

  40. 世間の対応

    View Slide

  41. Backend as a Amazon S
    3
    • S
    3
    などオブジェクトストレージをバックエンドに

    利⽤したCustom Actionを作る案


    • actions/cache に求める物がシンプルならこれでOK


    • 設定が煩雑になりがち


    • 各リポジトリごとに AWS_ACCESS_ID 書いたり
    41

    View Slide

  42. Backend as a Amazon S
    3
    • https://github.com/whywaita/actions-cache-s
    3 

    作ってます (ました)


    • 社内オブジェクトストレージをバックエンドに採⽤


    • 課題もいくつかあり


    • 設定の煩雑性


    • GET時にLifecycleを伸ばす機能がS
    3
    にない
    42

    View Slide

  43. BuildJet cache
    • BuildJet: self-hosted runner 会社


    • buildjet/cache@v
    3

    • バックエンドはCloud
    fl
    are R
    2

    • buildjet/setup-go などを完備
    43

    View Slide

  44. BuildJet cache
    44

    View Slide

  45. 45
    https://buildjet.com/for-github-actions/blog/launch-buildjet-cache

    View Slide

  46. 46
    https://buildjet.com/for-github-actions/blog/launch-buildjet-cache

    View Slide

  47. 47
    https://buildjet.com/for-github-actions/blog/launch-buildjet-cache

    View Slide

  48. 🥰🥰🥰
    48

    View Slide

  49. まとめ
    • self-hosted runnerをactions/cacheで使うと遅い


    • 海を越えてアクセスを⾏う必要があるため


    • 各位良い感じのソリューションで

    最⾼体験をしてください!!!!!


    • We Are hiring!
    49

    View Slide