12
8

More than 5 years have passed since last update.

GitLab CIで指定ブランチのマージリクエスト作成時(マージ前)にパイプラインを動かす方法

Posted at

共用開発/ステージング/本番と環境を使い分けているのですが、共用開発まではデバッグビルドのためスルーされていたエラーがステージングへのデプロイ時の本番ビルドでエラーとなってデプロイに失敗するということが多々ありまして。(使ってない変数が存在する等。。。)

そんなしょうもないエラーを解決するためにまたローカル環境からやり直すのは時間の無駄だな~。もっと早い段階で潰したいな~。と思って調べてみたら、指定ブランチのマージリクエスト作成時にパイプラインを動かす方法があったので試してみました。

〇環境

  • ローカル環境(feature/~ブランチ)
  • 共用開発環境(developブランチ)
  • ステージング環境(stagingブランチ) ※HEROKU
  • 本番環境(masterブランチ)      ※HEROKU

プロジェクト構成

Node.js+Angular+Express.js

〇マージリクエスト作成時にパイプラインを実行する方法

GitLab Docsに載ってました。

gitlab-ci.yml
test:
  stage: test
  script: ./test
  only:
  - merge_requests

これでマージリクエスト作成時にパイプラインが走るようになります!

が。。。
今回はdevelopブランチへのマージリクエスト作成時のみ実行したいのですが、上記の指定だと全ブランチへのマージリクエスト作成時にパイプラインが実行されてしまいます:sob:

◆ブランチ指定

色々探していたら、Stack Overflowの記事に書いてありました。

$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"のように指定できるみたいです!

gitlab-ci.yml
test:
  stage: test
  script: ./test
  only:
    refs:
        - merge_requests
    variables:
        - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"

これで、developブランチへのマージリクエスト作成時のみパイプラインが動くようになります:laughing:

〇まとめ

こんな感じでマージリクエスト作成時にパイプラインを動かすことが出来ました。
これで、マージリクエスト作成時(マージ前)にビルド確認ができるので、手戻りが少なくなりました:relaxed:
また、テストの実施もできるため、ちゃんとテストが通ってからレビュー依頼を出すという運用にでき、レビュー工数の削減やデグレの早期発見にもつながるかと思います。

参考

Pipelines for Merge Requests
In GitLab CI, is there a variable for a Merge Request's target branch?

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8