「GitHub Actions Meetup Tokyo #3」に参加してきました

  • 2024/5/16
  • https://gaugt.connpass.com/event/317178/
  • 普段GitHub Actionsは使ったないけど昔興味があったので参加してみました
  • 知らないことが多かったし、そもそもCIツールを全然使いこなせてないと思えたのがよかったです

JavaScript/TypeScript action 開発・運用の知見を大公開

  • @piris314さん

GitHubActionsの処理を使い回す

  • JSで共通処理を書いて使い回すことができる
    • TSで書いてビルドするのでももちろんOK
  • DockerContainerでやる方法もある
  • actions.yml
    • インプットのデフォルト値とか設定できる
    • ymlのテストもjsでする
  • 便利ライブラリ
    • @actions シリーズ
    • @octokit シリーズ
    • @vercel/ncc
    • js-yamlなどJSのライブラリ
  • ブランチ指定での実行はできないようにしている
    • 破壊的変更を入れた時に利用者側でコケるようになるから

サードパーティーランナーの紹介と使う上でのポイント

セルフホステッドランナー

  • GitHubが提供してない環境でjobを動かせる
    • Namespace
    • BuildJet
    • WarpBuild
    • AWS CodeBuild
  • 料金抑えたい
  • 実行時間短くしたい
    • シングルコアの性能高いのが売りのものも多い
  • クラウドストレージへアップロード/ダウンロード
    • S3使うならAWS上の方がはやいとか(10倍とか)
  • 詳細なジョブの分析
    • Namespaceは管理画面が充実
  • 注意点
    • 起動時間がかかる
    • Cache/Artifactが遅い
      • GitHubのストレージとやり取りするので
    • ランナーの差異
    • セキュリティ

E2Eテストワークフローを高速化・安定化させる取り組み

E2Eテストのワークフロー

  • セルフホステッドランナー上で動かしてる
  • つらみ
    • 実行時間が長い
      • 30分以上とか
    • Flaky
      • 変更ないのに失敗したり
  • 実行時間の可視化
    • actions-timelineで所要時間を可視化
    • E2Eが長かった
  • 失敗のボトルネックを計測
    • ジョブ/ステップごとの成功率を計測するライブラリを作った
    • セットアップ系でも失敗してた
  • 不安定さの解消
    • ServiceContainer(GitHubActionsが勝手にContainer立ち上げてくれるやつ)
      • Docker pullでrate limitで失敗してた
      • DockerHubからAmazonECRに移した
        • ついでに起動ジョブがはやくなった
    • npm installで失敗する
      • 謎にタイムアウトする
      • キャッシュがきいてれば解消しそう
      • GitHubのキャッシュは最大10GB(超えると消される)
      • featureブランチはrestoreのみでmainブランチでキャッシュsaveするようにした
    • テストがFlaky
      • 成功するときは30分前後だったのでタイムアウトで切るようにした
      • 失敗したら自動リトライするようなワークフロー作った