Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
テスト漏れを無くしたい!ワークフロー単位でトリガーを自由に設定したい要望
Search
Futa HIRAKOBA
August 05, 2020
Technology
0
170
テスト漏れを無くしたい! ワークフロー単位でトリガーを自由に設定したい要望
2020年8月5日(水) CircleCI コミュニティミートアップのLTで話した内容です
https://circleci.connpass.com/event/178558/
Futa HIRAKOBA
August 05, 2020
Tweet
Share
More Decks by Futa HIRAKOBA
See All by Futa HIRAKOBA
terraform plan 結果の検証を自動化するぞ! with Conftest / Testing terraform plan with Conftest
korosuke613
0
15k
生産性向上チームとは?
korosuke613
1
1.5k
サイボウズの生産性を高める生産性向上チームと開発文化 / Development culture and EPT in Cybozu
korosuke613
5
1.1k
What will your future college life look like? 〜今後の大学生活をどのようにしますか?〜
korosuke613
0
110
ETロボコン2019 CS大会モデル[DA] - K-Lab
korosuke613
0
1k
ETロボコン2019 地区大会モデル[DA] - K-Lab
korosuke613
0
930
人月の神話紹介
korosuke613
0
260
片山徹郎研究室紹介スライド2019
korosuke613
0
640
逆求人自己紹介プレゼン(平木場)
korosuke613
0
310
Other Decks in Technology
See All in Technology
Flutterで実装する実践的な攻撃対策とセキュリティ向上
fujikinaga
1
320
探求の技術
azukiazusa1
3
820
コミュニティと共に変化する 私とFusicの8年間
ayasamind
0
450
コード1ミリもわからないけど Claude CodeでFigjamプラグインを作った話
abokadotyann
1
160
マイクロリブート ~ACEマインドセットで実現するアジャイル~
sony
0
230
ソフトウェアエンジニアとデータエンジニアの違い・キャリアチェンジ
mtpooh
1
740
Black Hat USA 2025 Recap ~ クラウドセキュリティ編 ~
kyohmizu
0
510
よくわからない人向けの IAM Identity Center とちょっとした落とし穴
kazzpapa3
2
710
メタプログラミングRuby問題集の活用
willnet
2
760
Flutterコントリビューションのススメ
d_r_1009
1
340
日々のSlackアラート確認運用をCustom Chat Modesで楽にした話 / 日々のSlackアラート確認運用をCustom Chat Modesで楽にした話
imamotohikaru
0
430
Lazy Constant - finalフィールドの遅延初期化
skrb
0
110
Featured
See All Featured
Navigating Team Friction
lara
190
15k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
The Cost Of JavaScript in 2023
addyosmani
55
9.2k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Practical Orchestrator
shlominoach
190
11k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
Documentation Writing (for coders)
carmenintech
76
5.1k
Optimizing for Happiness
mojombo
379
70k
Building an army of robots
kneath
306
46k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8k
Code Review Best Practice
trishagee
72
19k
Transcript
テスト漏れを無くしたい! ワークフロー単位でトリガーを ⾃由に設定したい要望 サイボウズ株式会社 ⽣産性向上チーム 平⽊場 ⾵太(@shitimi_613) 2020年8⽉5⽇(⽔) CircleCI コミュニティミートアップ
簡単なプロフィール 2020/08/05 2 平⽊場 ⾵太(Futa HIRAKOBA) • 4⽉にサイボウズ新卒⼊社 • 6⽉末から⽣産性向上チームにJoin!
これまでの主な業務 • CI/CDパイプラインの整備 • dockerfile職⼈ • AWSリソースのゴミ掃除⾃動化 • ⿅児島に帰省したいけどコロナで帰れない... • 対⾺にはよく⾏く(ゲーム) • 最近はk8sの勉強やってる Shitimi_613 korosuke613
2020/08/05 3 とつぶやいたら 3~4⽇前...
2020/08/05 4 まさかの公式さんから連絡が来て いろいろあってLTすることになりました 3~4⽇前...
TL;DR ワークフロー単位で トリガーをPRに設定できるよう になってほしい! 2020/08/05 5
背景 2020/08/05 6
Garoonという製品がある 2020/08/05 7 https://garoon.cybozu.co.jp/
phpcsコマンドでコーディング規約を チェックしてコメントするジョブ Garoon開発のざっくりとした流れ 2020/08/05 8 コーディング 静的解析 テスト デリバリー lint-php
lint-js phan ... phpcs phpcs: https://github.com/squizlabs/PHP_CodeSniffer QA リリースなど コーディング規約を継続的に確認している
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. 差分に対して⾏う理由はすでに規約違反のコードが⼤量に存在するためです...
こんな感じでコメントしてくれる 2020/08/05 10
もしかしてこれpushじゃ うまくいかないんじゃ... 2020/08/05 11 と思われた⽅もいると思います。
phpcsジョブを包含する ワークフローを動かすには プルリクエストが必要* 2020/08/05 12 * 2つのcommitの⽐較もできるっちゃできる
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。
Garoonはコミットでも ワークフローを⾛らせたい 2020/08/05 14
CIRCLE_PULL_REQUEST環境変数で PRかどうかを判断してる 2020/08/05 15 https://circleci.com/docs/ja/2.0/env-vars/ CIRCLE_PULL_REQUEST: 関連付けられたプルリクエストのURLが格納される環境変数 • プルリクエストでないなら circleci
step halt でジョブを途中で終了させる • プルリクエストなら ジョブを続⾏する
コーディング規約を継続的に確認 2020/08/05 16 PR作成 & push comment PR phpcsジョブ: PASSED
or FAILED コーディング規約を守れていない変更のマージを未然に防げる プルリクエストがあるので phpcsコマンドを実⾏できる
常にきれいなコード! みんなハッピー! 2020/08/05 17
常にきれいなコード! みんなハッピー! 2020/08/05 18 とはならなかった...
問題 2020/08/05 19
もしプルリクエスト作成後に pushしなかったら...? 2020/08/05 20
PR作成後にpushした場合 2020/08/05 21 規約違反のコードをpush comment PR プルリクエストがあるので phpcsコマンドを実⾏できる PR作成 phpcsジョブ:
FAILED
push後にPRを作成した場合 2020/08/05 22 規約違反のコードをpush プルリクエストがないので phpcsコマンドを実⾏できない PR作成 (ワークフローは実⾏されない) phpcsジョブ: PASSED
ヨシ! https://kumamine.blogspot.com/2019/12/blog-post_27.html
push後にPRを作成した場合 2020/08/05 23 規約違反のコードをpush プルリクエストがないので phpcsコマンドを実⾏できない PR作成 (ワークフローは実⾏されない) phpcsジョブ: PASSED
ヨシ! https://kumamine.blogspot.com/2019/12/blog-post_27.html 良くない
もしこれがガチのテストだったら.. 2020/08/05 24 バグを⾒過ごしてしまうかも... テストしていないのに あたかもテストが通過したと勘違いして マージしてしまう
2020/08/05 25 運⽤でカバー(PRを先に作る or Re-Runする) ➡ヒューマンエラーは避けられないし、⾯倒 マージ先ブランチを特定して⽐較する ➡特定が⼤変1 GitHub Actionsを使ってPR作成時にワークフローを動かす
➡本末転倒感がある2 etc... もちろん回避策はある 1. garoonはmasterブランチと呼べるものが複数個あるので... 2. しかも、GitHub Enterprise Serverではまだ使えない ベストな⽅法は無い...
ワークフロー単位でトリガー をPRに設定できればな〜〜 はるかに楽なのにな〜〜〜 2020/08/05 26
2020/08/05 27 • 今回はだいぶ狭いユースケースでしたが、CircleCIのコ ミュニティでも多くの需要があるようです*。 • コード上(config.yml)で設定できるようになるのが個⼈ 的な理想です。 ワークフロー単位で トリガーにPRを設定できるよう
になってほしいです!! * https://ideas.circleci.com/ideas/CCI-I-316 なので、
というわけで、 CircleCIのみなさん、 ご検討のほど よろしくお願いします!! 2020/08/05 28