GitLab の CI/CD でデプロイ先に応じて環境変数を変える
目的
フロントエンドで使用する環境変数を環境ごとに変えたいため、ビルド前に環境変数をセットするのが目的です。
Laravel Mix を使うと頭に MIX が付いている環境変数をフロントエンドと共有できますが、当然フロントエンドのビルド時点で設定されている必要があります。
このビルド時点で環境変数をセットするというのを CI 上でやりたいというのが動機です。
gitlab-ci.yaml の書き方
以下のようにworkflow:rules
を使って、各環境に応じたブランチがプッシュされた場合に環境変数を切り替えるようにしました。
GitLab CI/CD パイプライン設定リファレンス | GitLab
workflow: rules: - if: $CI_COMMIT_REF_NAME == "staging" variables: MIX_HOGE_URL: https://example.com/staging - if: $CI_COMMIT_REF_NAME == "master" variables: MIX_HOGE_URL: https://example.com/production - when: always ## 以下にジョブの設定などが続く
$CI_COMMIT_REF_NAME
という変数は現在のブランチ名(またタグ名)になるため、この変数を判定に使い環境によって設定する値を切り替えます。
最後のwhen: always
がないと if に書いたブランチ以外 CI/CD が走らないので注意です。
変数が増えてきたら include などを使って別ファイルに切り分けてもよさそう。
有効でなかった設定
以下の CI/CD の変数の設定で enviroment
という項目があり、デプロイ先によって変数の値を変えられます。
gitlab-docs.creationline.com
しかし、この設定は特定の環境を指定するとデプロイのジョブのみで有効になってしまうため、フロントエンドのビルドのジョブの時点では環境変数がセットされませんでした。
※すべての環境に適用する設定にすると CI/CD の開始時点からセットされていました