共用開発/ステージング/本番と環境を使い分けているのですが、共用開発まではデバッグビルドのためスルーされていたエラーがステージングへのデプロイ時の本番ビルドでエラーとなってデプロイに失敗するということが多々ありまして。(使ってない変数が存在する等。。。)
そんなしょうもないエラーを解決するためにまたローカル環境からやり直すのは時間の無駄だな~。もっと早い段階で潰したいな~。と思って調べてみたら、指定ブランチのマージリクエスト作成時にパイプラインを動かす方法があったので試してみました。
〇環境
- ローカル環境(feature/~ブランチ)
- 共用開発環境(developブランチ)
- ステージング環境(stagingブランチ) ※HEROKU
- 本番環境(masterブランチ) ※HEROKU
プロジェクト構成
Node.js+Angular+Express.js
〇マージリクエスト作成時にパイプラインを実行する方法
GitLab Docsに載ってました。
test:
stage: test
script: ./test
only:
- merge_requests
これでマージリクエスト作成時にパイプラインが走るようになります!
が。。。
今回はdevelopブランチへのマージリクエスト作成時のみ実行したいのですが、上記の指定だと全ブランチへのマージリクエスト作成時にパイプラインが実行されてしまいます
◆ブランチ指定
色々探していたら、Stack Overflowの記事に書いてありました。
$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"
のように指定できるみたいです!
test:
stage: test
script: ./test
only:
refs:
- merge_requests
variables:
- $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"
これで、developブランチへのマージリクエスト作成時のみパイプラインが動くようになります
〇まとめ
こんな感じでマージリクエスト作成時にパイプラインを動かすことが出来ました。
これで、マージリクエスト作成時(マージ前)にビルド確認ができるので、手戻りが少なくなりました
また、テストの実施もできるため、ちゃんとテストが通ってからレビュー依頼を出すという運用にでき、レビュー工数の削減やデグレの早期発見にもつながるかと思います。
参考
Pipelines for Merge Requests
In GitLab CI, is there a variable for a Merge Request's target branch?