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
160
テスト漏れを無くしたい! ワークフロー単位でトリガーを自由に設定したい要望
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.4k
サイボウズの生産性を高める生産性向上チームと開発文化 / Development culture and EPT in Cybozu
korosuke613
4
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
900
人月の神話紹介
korosuke613
0
240
片山徹郎研究室紹介スライド2019
korosuke613
0
600
逆求人自己紹介プレゼン(平木場)
korosuke613
0
300
Other Decks in Technology
See All in Technology
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
120
本が全く読めなかった過去の自分へ
genshun9
0
630
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.1k
mrubyと micro-ROSが繋ぐロボットの世界
kishima
2
360
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全 / 20250625-aws-summit-aws-policy
opelab
9
1.2k
強化されたAmazon Location Serviceによる新機能と開発者体験
dayjournal
3
230
5min GuardDuty Extended Threat Detection EKS
takakuni
0
160
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
170
JEDAI Databricks Free Editionもくもく会
taka_aki
1
110
生まれ変わった AWS Security Hub (Preview) を紹介 #reInforce_osaka / reInforce New Security Hub
masahirokawahara
0
260
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1.2k
A2Aのクライアントを自作する
rynsuke
1
220
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Designing for Performance
lara
609
69k
Practical Orchestrator
shlominoach
188
11k
The Cult of Friendly URLs
andyhume
79
6.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
KATA
mclloyd
30
14k
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