CircleCIでdangerを動かすときのOnly Build Pull RequestsとDirty Hack

dangerは設定したリポジトリにPull Requestが作成された後に様々なcode reviewを行うgemです。

dangerはPlugin構造になっており、danger-mentiondanger-rubocopなどのpluginが作られています。トレタではtoreta-railsというメインAPIリポジトリでdangerを使ってbotに最低限のcode reviewを任せています。

このdangerをCircleCIで動かすときに少しハマるポイントがあります。

Pull Requestの作成とCircleCIのpushのタイミングが合わない

CircleCIはデフォルトの状態だとcommitをpushしたらすぐCIが起動します。dangerはCIの起動をフックにしてPull Requestを確認するため、以下のような現象が発生します。

1. commitをpush
2. CI起動
3. danger起動
4. Pull Requestが無いためdangerの実行がskipされる

この現象を回避するために、dangerではCircleCIのOnly build pull requestsを有効にすることを勧めています

Only build pull requestsの挙動

この設定の挙動は以下の通りです。

・Pull Requestが存在しない状態だとgithubにpushしただけではCIが走らなくなる
・Pull RequestをopenしたタイミングでCIが走る
・Pull Requestをopenした状態であれば、そのPull Requestのbranchに追加でpushするたびにCIが走る

しかし、この設定を有効にするとDeploy Flowに影響を与えてしまいました。

トレタのDeploy Flow

・developが開発用branch。developのcommitはdevelopにmergeされたらstaging環境にdeployされる。default branch。
・masterが本番用branch。masterのcommitはmasterにmergeされたらproduction環境にdeployされる

default branchはOnly build pull requestsの影響を受けません。しかし、master branchはmergeしたらCIが起動して欲しいのにCIが起動しない状態になってしまいました。

CI起動用Pull Requestをopenし続ける

私はdangerを使ってcode reviewを自動化したかったのですが、既存のDeploy Flowは特に問題なかったため変えたくありませんでした。調べたところ、以下のようなhackで期待する挙動になりました。

masterから、masterから切った適当なbranchのPull Requestを作成します。このPull Requestをopenにし続けることで、Pull Requestをopenした状態であれば、そのPull Requestのbranchに追加でpushするたびにCIが走るという条件に当てはまり、developからmasterにmergeするときに無事にdeployできるようになりました。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

2
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。