git-flowでもPull RequestがなければCircleCIのCIを走らせないOrbを作りました
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
それではまた!