Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

簡単なプロフィール 2020/08/05 2 平⽊場 ⾵太(Futa HIRAKOBA) • 4⽉にサイボウズ新卒⼊社 • 6⽉末から⽣産性向上チームにJoin! これまでの主な業務 • CI/CDパイプラインの整備 • dockerfile職⼈ • AWSリソースのゴミ掃除⾃動化 • ⿅児島に帰省したいけどコロナで帰れない... • 対⾺にはよく⾏く(ゲーム) • 最近はk8sの勉強やってる Shitimi_613 korosuke613

Slide 3

Slide 3 text

2020/08/05 3 とつぶやいたら 3~4⽇前...

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

背景 2020/08/05 6

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

phpcsコマンドでコーディング規約を チェックしてコメントするジョブ Garoon開発のざっくりとした流れ 2020/08/05 8 コーディング 静的解析 テスト デリバリー lint-php lint-js phan ... phpcs phpcs: https://github.com/squizlabs/PHP_CodeSniffer QA リリースなど コーディング規約を継続的に確認している

Slide 9

Slide 9 text

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. 差分に対して⾏う理由はすでに規約違反のコードが⼤量に存在するためです...

Slide 10

Slide 10 text

こんな感じでコメントしてくれる 2020/08/05 10

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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。

Slide 14

Slide 14 text

Garoonはコミットでも ワークフローを⾛らせたい 2020/08/05 14

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

コーディング規約を継続的に確認 2020/08/05 16 PR作成 & push comment PR phpcsジョブ: PASSED or FAILED コーディング規約を守れていない変更のマージを未然に防げる プルリクエストがあるので phpcsコマンドを実⾏できる

Slide 17

Slide 17 text

常にきれいなコード! みんなハッピー! 2020/08/05 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

問題 2020/08/05 19

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

もしこれがガチのテストだったら.. 2020/08/05 24 バグを⾒過ごしてしまうかも... テストしていないのに あたかもテストが通過したと勘違いして マージしてしまう

Slide 25

Slide 25 text

2020/08/05 25 運⽤でカバー(PRを先に作る or Re-Runする) ➡ヒューマンエラーは避けられないし、⾯倒 マージ先ブランチを特定して⽐較する ➡特定が⼤変1 GitHub Actionsを使ってPR作成時にワークフローを動かす ➡本末転倒感がある2 etc... もちろん回避策はある 1. garoonはmasterブランチと呼べるものが複数個あるので... 2. しかも、GitHub Enterprise Serverではまだ使えない ベストな⽅法は無い...

Slide 26

Slide 26 text

ワークフロー単位でトリガー をPRに設定できればな〜〜 はるかに楽なのにな〜〜〜 2020/08/05 26

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

というわけで、 CircleCIのみなさん、 ご検討のほど よろしくお願いします!! 2020/08/05 28