2020年8月5日(水) CircleCI コミュニティミートアップのLTで話した内容です https://circleci.connpass.com/event/178558/
テスト漏れを無くしたい!ワークフロー単位でトリガーを⾃由に設定したい要望サイボウズ株式会社 ⽣産性向上チーム平⽊場 ⾵太(@shitimi_613)2020年8⽉5⽇(⽔) CircleCI コミュニティミートアップ
View Slide
簡単なプロフィール2020/08/052平⽊場 ⾵太(Futa HIRAKOBA)• 4⽉にサイボウズ新卒⼊社• 6⽉末から⽣産性向上チームにJoin!これまでの主な業務• CI/CDパイプラインの整備• dockerfile職⼈• AWSリソースのゴミ掃除⾃動化• ⿅児島に帰省したいけどコロナで帰れない...• 対⾺にはよく⾏く(ゲーム)• 最近はk8sの勉強やってるShitimi_613korosuke613
2020/08/053とつぶやいたら3~4⽇前...
2020/08/054まさかの公式さんから連絡が来ていろいろあってLTすることになりました3~4⽇前...
TL;DRワークフロー単位でトリガーをPRに設定できるようになってほしい!2020/08/055
背景2020/08/056
Garoonという製品がある2020/08/057https://garoon.cybozu.co.jp/
phpcsコマンドでコーディング規約をチェックしてコメントするジョブGaroon開発のざっくりとした流れ2020/08/058コーディング 静的解析 テスト デリバリーlint-phplint-jsphan...phpcsphpcs: https://github.com/squizlabs/PHP_CodeSnifferQAリリースなどコーディング規約を継続的に確認している
phpcsジョブがやってくれること2020/08/0591.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-requests2. 差分に対して⾏う理由はすでに規約違反のコードが⼤量に存在するためです...
こんな感じでコメントしてくれる2020/08/0510
もしかしてこれpushじゃうまくいかないんじゃ...2020/08/0511と思われた⽅もいると思います。
phpcsジョブを包含するワークフローを動かすにはプルリクエストが必要*2020/08/0512* 2つのcommitの⽐較もできるっちゃできる
CircleCIでプルリクエストをワークフローのトリガーとする2020/08/05131. https://circleci.com/docs/2.0/oss/#build-pull-requests-from-forked-repositories2. ただし、デフォルトブランチだけは従来通りpushでワークフローが動くプロジェクト単位で、プルリクエスト時にワークフローを動かす設定ができる1。設定⽅法Project Settings > Advanced > Only build pull requestsただし、設定を有効にすると、pushでワークフローが動かなくなる2。
Garoonはコミットでもワークフローを⾛らせたい2020/08/0514
CIRCLE_PULL_REQUEST環境変数でPRかどうかを判断してる2020/08/0515https://circleci.com/docs/ja/2.0/env-vars/CIRCLE_PULL_REQUEST: 関連付けられたプルリクエストのURLが格納される環境変数• プルリクエストでないならcircleci step haltでジョブを途中で終了させる• プルリクエストならジョブを続⾏する
コーディング規約を継続的に確認2020/08/0516PR作成&pushcommentPRphpcsジョブ: PASSED or FAILEDコーディング規約を守れていない変更のマージを未然に防げるプルリクエストがあるのでphpcsコマンドを実⾏できる
常にきれいなコード!みんなハッピー!2020/08/0517
常にきれいなコード!みんなハッピー!2020/08/0518とはならなかった...
問題2020/08/0519
もしプルリクエスト作成後にpushしなかったら...?2020/08/0520
PR作成後にpushした場合2020/08/0521規約違反のコードをpushcommentPRプルリクエストがあるのでphpcsコマンドを実⾏できるPR作成phpcsジョブ: FAILED
push後にPRを作成した場合2020/08/0522規約違反のコードをpushプルリクエストがないのでphpcsコマンドを実⾏できないPR作成(ワークフローは実⾏されない)phpcsジョブ: PASSEDヨシ!https://kumamine.blogspot.com/2019/12/blog-post_27.html
push後にPRを作成した場合2020/08/0523規約違反のコードをpushプルリクエストがないのでphpcsコマンドを実⾏できないPR作成(ワークフローは実⾏されない)phpcsジョブ: PASSEDヨシ!https://kumamine.blogspot.com/2019/12/blog-post_27.html良くない
もしこれがガチのテストだったら..2020/08/0524バグを⾒過ごしてしまうかも...テストしていないのにあたかもテストが通過したと勘違いしてマージしてしまう
2020/08/0525運⽤でカバー(PRを先に作る or Re-Runする)➡ヒューマンエラーは避けられないし、⾯倒マージ先ブランチを特定して⽐較する➡特定が⼤変1GitHub Actionsを使ってPR作成時にワークフローを動かす➡本末転倒感がある2etc...もちろん回避策はある1. garoonはmasterブランチと呼べるものが複数個あるので...2. しかも、GitHub Enterprise Serverではまだ使えないベストな⽅法は無い...
ワークフロー単位でトリガーをPRに設定できればな〜〜はるかに楽なのにな〜〜〜2020/08/0526
2020/08/0527• 今回はだいぶ狭いユースケースでしたが、CircleCIのコミュニティでも多くの需要があるようです*。• コード上(config.yml)で設定できるようになるのが個⼈的な理想です。ワークフロー単位でトリガーにPRを設定できるようになってほしいです!!* https://ideas.circleci.com/ideas/CCI-I-316なので、
というわけで、CircleCIのみなさん、ご検討のほどよろしくお願いします!!2020/08/0528