git-flowでもPull RequestがなければCircleCIのCIを走らせないOrbを作りました | Dev Driven 開発・デザインチーム git-flowでもPull RequestがなければCircleCIのCIを走らせないOrbを作りました | 働くひとと組織の健康を創る iCARE

BLOG

git-flowでもPull RequestがなければCircleCIのCIを走らせないOrbを作りました

中村一星
2020/09/04

git-flowでもPull RequestがなければCIを走らせないOrbを作りました

もうタイトルがすべてなんですが、ちょっと説明を。

Carely の開発では「開発時にはfeatureブランチをdevelopブランチにマージ。リリース時にはmasterブランチにマージしてデプロイ」という、いわゆる git-flow を用いて開発しています。

ただ最近は人数やテストも増えてきてCircleCIの実行回数が増えてきて、料金が多くかかるようになってきました。
中には「とりあえず保存のためにPushしておこう」という感じでPushした結果CIが回ってしまうということも少なくありませんでした。

CircleCI にはよさげなオプションがあるけど。。。

CircleCIには「Only build Pull Requests」というオプションがあります。しかしこのオプションは

Note: Even if this option is enabled, CircleCI will still build all commits from your project’s default branch.

とあり、PRがない状態ではデフォルトのブランチのみしかCIが回りません。

Carely の開発では master にマージされた時にCircleCI上で Capistrano を実行するようになっているため、このオプションを有効にするとデプロイがされなくなってしまいました。

ということで自分でプログラムを作ってOrbにしました

CircleCI の定義済環境変数に CIRCLE_PULL_REQUEST というものがあり、Pull Request が出ていない時はこの環境変数が空になります。

これを利用して、「指定したブランチ」もしくは「Pull Requestが出ている」場合のみCIを実行し、それ以外の場合にはAPIを使ってWork Flowをキャンセルするような Orb を作りました。

https://circleci.com/orbs/registry/orb/icare-jp-oss/only-build-pull-requests-with-git-flow

CIを実行するブランチを指定できるので、master develop 以外のブランチを使用している場合にもOrbを使うことができます。

条件のチェックをするため、完全にCIが走らないわけではありませんが、それでも実行回数の削減につながります。
よかったらお使いください!

またソースをGitHubに公開しているのでPullRequstお待ちしております!
https://github.com/icare-jp-oss/only-build-pull-requests-with-git-flow

それではまた!