ひでメモ

プログラムについて勉強したことを書きます。たぶん。

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 の開始時点からセットされていました