Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[CA.unity #2] 動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話

8ca67ac59d908cf23431095fc2cacb09?s=47 sada
July 09, 2021

[CA.unity #2] 動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話

8ca67ac59d908cf23431095fc2cacb09?s=128

sada

July 09, 2021
Tweet

Transcript

  1. 動かないコードを マージさせないための コンパイルエラー検知くんを GithubActionで作った話 Graffity株式会社 sada 1

  2. 自己紹介 sada @SAyanada9 Graffity株式会社所属 新卒1年目のクライアントエンジニア兼ARエンジニア兼CI/CDエンジニア 2

  3. 自己紹介 実はGraffityにはインターンなどを含むと3年弱在籍 Graffityではスマホ向けARシューティングバトル 「Leap Trigger」を開発、運営中! 3 ©2021 Graffity Inc.

  4. 開発経緯 • 弊社ではSlackでJenkinsおじさんにビルドコマンドを投げるような仕組みを使って いる 4

  5. 開発経緯 • Slackビルドはエンジニア以外のメンバーも利用可能 • セキュリティの関係上Jenkinsに自由にログインできないようにしている • Slackにはビルドの成功可否のみ通知させる エンジニアがいない場合ビルドが失敗すると色々大変 5

  6. 開発経緯 そこでビルドが失敗する原因で一番多かった コンパイルエラーなコードを 本流のブランチにマージできないような仕組みを作成 6

  7. 仕組み GitHubのプルリクエストにコミットがPushされるたびに コンパイルエラーかどうかをチェックする 7

  8. 実装 使用したもの • Unity • GitHub Actions ◦ SelfHostRunner 8

  9. 実装 Unity編 • バッチモードでUnityプロジェクトを開くとコンパイルエラーなどを起こしていたらエ ラーを吐いて exit 1で終了するという仕様を使っている ◦ https://docs.unity3d.com/ja/2020.3/Manual/CommandLineArguments.html 参考

    • UnityEditorで一応開いているのでついでに.csprojなどの依存性も解決してくれる 9
  10. 実装 GitHubActions編 GitHubActionsとは • 自動化ツール • GitHubのさまざまなActionをトリガーに処理を作成可能 ◦ Pushされたら ◦

    Issueをたてられたら • (ほぼ)同様なツールにGitLab CIなど 10
  11. 実装 GithubActions編 SelfHostRunnerとは これはGithubActionsの実行される仮想マシンを 自前のPCで実行することができる公式ツール 11

  12. 実装 GithubActions編 なぜSelfHostRunnerを使っているのかというと • GithubActionsのDockerでもUnityが使えるが、ライセンス処理がめんどう • プロジェクトが重たいため毎回Importが走ると時間がかかる • なにより、Privateだと流石にお高い •

    ちょうどJenkinsに使っているMacのPCがあった など 12
  13. 実装 GithubActions編 SelfHostRunnerの注意点 • 任意コードが実行できてしまう • 絶対にパブリックなリポジトリで実行可能にしない ◦ https://docs.github.com/ja/actions/hosting-your-own-runners/about-self-hosted-runners 参考

    • 実行速度はホストPC依存(MacProとかだと早い) 13
  14. 実装 GithubActions編 全体像 14

  15. 実装 GithubActions編 この部分はほぼおまじない 15

  16. 実装 GithubActions編 Unityを開いているだけ $UNITY_PATH はUnityの.appのPATH 上の方で指定してもよし、そのまま直書きしてもよし $GITHUB_WORKSPACE はGitHubActionsで提供されている環境変数の一つ そのリポジトリの直下のPATHを示している 16

  17. 実装 GithubActions編 この項は結果をGitHubのPull request上にコメントしている 17

  18. 実装 GithubActions編 secrets.GITHUB_TOKEN 便利なトークン、Botが返してくれる github.event.pull_request.comments_url イベントが発火されたプルリク エストのコメントURL このURLを使ってコメントするAPIをPOSTで投げてる 18

  19. 実装 GithubActions編 github.actor イベントが開始されたコミットをした人 github.sha コミットのハッシュ コミットのURLを特定するために使用 19

  20. 実装 GithubActions編 全部を実装するとこれがプルリクエストのコメントに表示される あとは、お好みで追加でSlackにもなげるようにしたりとかをする ここに全体のymlファイルを上げているのでご参考に https://github.com/sada913/CompileErrorCheckKun 20

  21. 効果 • 去年の10月あたりに導入した • 1回だいたい1分前後(Unityのインポート時間に結構左右される) ◦ 何も設定していない場合 Standaloneで開くため圧縮しない場合比較的はやい 21

  22. 効果 • ビルドが失敗することが減った ◦ アセットバンドル関連や using Editorなどがまだ検知できない ◦ 新バージョン構想中 •

    コンフリクトの解決後のコンパイルエラーなコミットを Pushしてしまったときすぐに気づけるように • コミット忘れのファイルがあったときに気づけるように 22
  23. 効果 ちなみに実際のコンパイルエラー原因は • コミット忘れ • コンフリクト解決失敗でコンパイルエラー • そもそもコンパイルエラーのコード の順に多かった 23

  24. 最後に 元気に動いている様子 上記の実装に加えてSlackにも投げるようにしたあと コンパイルエラー検知くんが稼働している様子 24