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

テスト漏れを無くしたい! ワークフロー単位でトリガーを自由に設定したい要望

テスト漏れを無くしたい! ワークフロー単位でトリガーを自由に設定したい要望

2020年8月5日(水) CircleCI コミュニティミートアップのLTで話した内容です
https://circleci.connpass.com/event/178558/

5afbf65e9e32cef9ab74e5b5347a5bce?s=128

Futa HIRAKOBA

August 05, 2020
Tweet

Transcript

  1. テスト漏れを無くしたい! ワークフロー単位でトリガーを ⾃由に設定したい要望 サイボウズ株式会社 ⽣産性向上チーム 平⽊場 ⾵太(@shitimi_613) 2020年8⽉5⽇(⽔) CircleCI コミュニティミートアップ

  2. 簡単なプロフィール 2020/08/05 2 平⽊場 ⾵太(Futa HIRAKOBA) • 4⽉にサイボウズ新卒⼊社 • 6⽉末から⽣産性向上チームにJoin!

    これまでの主な業務 • CI/CDパイプラインの整備 • dockerfile職⼈ • AWSリソースのゴミ掃除⾃動化 • ⿅児島に帰省したいけどコロナで帰れない... • 対⾺にはよく⾏く(ゲーム) • 最近はk8sの勉強やってる Shitimi_613 korosuke613
  3. 2020/08/05 3 とつぶやいたら 3~4⽇前...

  4. 2020/08/05 4 まさかの公式さんから連絡が来て いろいろあってLTすることになりました 3~4⽇前...

  5. TL;DR ワークフロー単位で トリガーをPRに設定できるよう になってほしい! 2020/08/05 5

  6. 背景 2020/08/05 6

  7. Garoonという製品がある 2020/08/05 7 https://garoon.cybozu.co.jp/

  8. phpcsコマンドでコーディング規約を チェックしてコメントするジョブ Garoon開発のざっくりとした流れ 2020/08/05 8 コーディング 静的解析 テスト デリバリー lint-php

    lint-js phan ... phpcs phpcs: https://github.com/squizlabs/PHP_CodeSniffer QA リリースなど コーディング規約を継続的に確認している
  9. phpcsジョブが やってくれること 2020/08/05 9 1.GitHub APIを叩いて1、 マージ先ブランチ(base)と マージ元ブランチ(compare)との差分を取得 2.差分3に対してphpcsコマンドを実⾏ 3.GitHubのPull

    Requestにコメント 1. h$ps://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests 2. 差分に対して⾏う理由はすでに規約違反のコードが⼤量に存在するためです...
  10. こんな感じでコメントしてくれる 2020/08/05 10

  11. もしかしてこれpushじゃ うまくいかないんじゃ... 2020/08/05 11 と思われた⽅もいると思います。

  12. phpcsジョブを包含する ワークフローを動かすには プルリクエストが必要* 2020/08/05 12 * 2つのcommitの⽐較もできるっちゃできる

  13. CircleCIでプルリクエストを ワークフローのトリガーとする 2020/08/05 13 1. https://circleci.com/docs/2.0/oss/#build-pull-requests-from-forked-repositories 2. ただし、デフォルトブランチだけは従来通りpushでワークフローが動く プロジェクト単位で、プルリクエスト時にワー クフローを動かす設定ができる1。

    設定⽅法 Project Settings > Advanced > Only build pull requests ただし、設定を有効にすると、pushでワークフ ローが動かなくなる2。
  14. Garoonはコミットでも ワークフローを⾛らせたい 2020/08/05 14

  15. CIRCLE_PULL_REQUEST環境変数で PRかどうかを判断してる 2020/08/05 15 https://circleci.com/docs/ja/2.0/env-vars/ CIRCLE_PULL_REQUEST: 関連付けられたプルリクエストのURLが格納される環境変数 • プルリクエストでないなら circleci

    step halt でジョブを途中で終了させる • プルリクエストなら ジョブを続⾏する
  16. コーディング規約を継続的に確認 2020/08/05 16 PR作成 & push comment PR phpcsジョブ: PASSED

    or FAILED コーディング規約を守れていない変更のマージを未然に防げる プルリクエストがあるので phpcsコマンドを実⾏できる
  17. 常にきれいなコード! みんなハッピー! 2020/08/05 17

  18. 常にきれいなコード! みんなハッピー! 2020/08/05 18 とはならなかった...

  19. 問題 2020/08/05 19

  20. もしプルリクエスト作成後に pushしなかったら...? 2020/08/05 20

  21. PR作成後にpushした場合 2020/08/05 21 規約違反のコードをpush comment PR プルリクエストがあるので phpcsコマンドを実⾏できる PR作成 phpcsジョブ:

    FAILED
  22. push後にPRを作成した場合 2020/08/05 22 規約違反のコードをpush プルリクエストがないので phpcsコマンドを実⾏できない PR作成 (ワークフローは実⾏されない) phpcsジョブ: PASSED

    ヨシ! https://kumamine.blogspot.com/2019/12/blog-post_27.html
  23. push後にPRを作成した場合 2020/08/05 23 規約違反のコードをpush プルリクエストがないので phpcsコマンドを実⾏できない PR作成 (ワークフローは実⾏されない) phpcsジョブ: PASSED

    ヨシ! https://kumamine.blogspot.com/2019/12/blog-post_27.html 良くない
  24. もしこれがガチのテストだったら.. 2020/08/05 24 バグを⾒過ごしてしまうかも... テストしていないのに あたかもテストが通過したと勘違いして マージしてしまう

  25. 2020/08/05 25 運⽤でカバー(PRを先に作る or Re-Runする) ➡ヒューマンエラーは避けられないし、⾯倒 マージ先ブランチを特定して⽐較する ➡特定が⼤変1 GitHub Actionsを使ってPR作成時にワークフローを動かす

    ➡本末転倒感がある2 etc... もちろん回避策はある 1. garoonはmasterブランチと呼べるものが複数個あるので... 2. しかも、GitHub Enterprise Serverではまだ使えない ベストな⽅法は無い...
  26. ワークフロー単位でトリガー をPRに設定できればな〜〜 はるかに楽なのにな〜〜〜 2020/08/05 26

  27. 2020/08/05 27 • 今回はだいぶ狭いユースケースでしたが、CircleCIのコ ミュニティでも多くの需要があるようです*。 • コード上(config.yml)で設定できるようになるのが個⼈ 的な理想です。 ワークフロー単位で トリガーにPRを設定できるよう

    になってほしいです!! * https://ideas.circleci.com/ideas/CCI-I-316 なので、
  28. というわけで、 CircleCIのみなさん、 ご検討のほど よろしくお願いします!! 2020/08/05 28