このブログは、自前サーバーのGitLab-CEリポジトリからNetlifyにデプロイしているのですが、GitLab-CEのリポジトリでもマージリクエストを送ることでプレビュービルドができることがわかりました。

ビルド終了時に、チャットに通知を送りたいので、NetlifyのBuild時の環境変数について調査しました。

# Netlify ビルド環境変数

公式ドキュメント:
Build environment variables | Netlify Docs

  • CONTEXT: デプロイの種類
    • production: 本番デプロイ
    • deploy-preview: プルリクエストや、マージリクエストによるプレビューデプロイ
    • branch-deploy: ブランチによるブランチデプロイ
  • REPOSITORY_URL: リポジトリのURL
    • 例: ssh://XXXXXX.XXX:XXXX/dorasu-tech/dorasu-tech-blog.git
  • BRANCH: チェックアウトしたブランチのリポジトリ
    • 例: master merge-requests/20/head
  • HEAD: ヘッドブランチの名前
    • 例: master netlify_env
  • COMMIT_REF: 作成中のコミットの参照ID(「SHA」または「ハッシュ」とも呼ばれます)。
  • PULL_REQUEST: ビルドがプル/マージリクエストからのものか(true)、そうでないか(false)
  • REVIEW_ID: プル/マージリクエストのID
  • URL: サイトのメインURL
  • DEPLOY_URL: デプロイごとのURL
    DEPLOY_IDがついたURLが生成されるのでユニークなものになります。
    • 例: https://5b243e66dd6a547b4fee73ae--petsof.netlify.com
  • DEPLOY_PRIME_URL: ブランチデプロイやプレビューデプロイごとのURL
    • 例: https://feature-branch--petsof.netlify.com https://deploy-preview-1--petsof.netlify.com
  • DEPLOY_ID: デプロイごとのの一意のID
    • 例: 578ab634d6865d5cf960d620

# 実際にビルド時の環境変数を調べてみる

# 調査方法

ビルド時に以下のようなシェルスクリプトが実行されるようにして、ビルドログを参照します。

#!/bin/sh
echo CONTEXT : $CONTEXT
echo REPOSITORY_URL : $REPOSITORY_URL
echo BRANCH : $BRANCH
echo HEAD : $HEAD
echo COMMIT_REF : $COMMIT_REF
echo CACHED_COMMIT_REF : $CACHED_COMMIT_REF
echo PULL_REQUEST : $PULL_REQUEST
echo REVIEW_ID : $REVIEW_ID
echo URL : $URL
echo DEPLOY_URL : $DEPLOY_URL
echo DEPLOY_PRIME_URL : $DEPLOY_PRIME_URL
echo DEPLOY_ID : $DEPLOY_ID

# プレビュービルド時の結果

CONTEXT : deploy-preview
REPOSITORY_URL : ssh://XXXXXXX.com:XXX/dorasu-tech/dorasu-tech-blog.git
BRANCH : merge-requests/20/head
HEAD : netlify_env
COMMIT_REF : 930eb341dff373cec9c9202dfb9fdd18b840bc91
CACHED_COMMIT_REF : dae184c29c4383c3d39f5a0b36508d0fd89864e1
PULL_REQUEST : true
REVIEW_ID : 20
URL : https://dorasu-tech.dorasu.com
DEPLOY_URL : https://5e71bb55fe455c0007619f71--XXXXXX.netlify.com
DEPLOY_PRIME_URL : https://deploy-preview-20--XXXXXX.netlify.com
DEPLOY_ID : 5e71bb55fe455c0007619f71

# 本番ビルド時の結果

CONTEXT : production
REPOSITORY_URL : ssh://XXXXXXXX.com:XXX/dorasu-tech/dorasu-tech-blog.git
BRANCH : master
HEAD : master
COMMIT_REF : 9058d812be1bfd42449dccf093ca9390e72a9903
CACHED_COMMIT_REF : dae184c29c4383c3d39f5a0b36508d0fd89864e1
PULL_REQUEST : false
REVIEW_ID :
URL : https://dorasu-tech.dorasu.com
DEPLOY_URL : https://5e71bf9cd8a04b000804f21f--XXXXXX.netlify.com
DEPLOY_PRIME_URL : https://master--XXXXXX.netlify.com
DEPLOY_ID : 5e71bf9cd8a04b000804f21f

# まとめ

ビルド終了時の通知は、

  1. CONTEXTで何ビルドか判断
  2. 確認用URLは、本番ビルドならURL それ以外は、DEPLOY_PRIME_URL
  3. マージリクエストのページへのリンクは、REVIEW_IDを使ってURLを生成

このあたりを使えば良さそうです。