CNE GCP対応:オーバーレイを使用したOSGiモジュールまたはクライアント拡張機能の追加
Cloud Native Experience (CNE) ツールキットは、 オーバーレイ を使用して、標準的な Liferay デプロイメントをカスタマイズします。
プロジェクト内のすべての環境で共有されるプロジェクトレベルのGoogle Cloud Storageバケットに、カスタムファイル(OSGiモジュール、クライアント拡張機能、構成ファイル、サイト初期化子など)をアップロードし、各環境がPodの起動時にそれらを適用するように構成します。
このアプローチでは、カスタムのLiferayイメージビルドを回避し、標準コンテナの上に変更を適用し、GitOpsを通じて完全に管理されます。
CNEオーバーレイバケットは、各環境ごとではなく、プロジェクトごとにスコープが設定されます。 GitOpsリポジトリにオーバーレイバケットを有効にする project.yaml ファイルがない場合、古い環境ごとのモデルを使用しています。 環境ごとの古いバケットは自動的に移行されないため、そのモデル用に構築されたオーバーレイ構成は、移行が完了するまで機能しなくなります。 オーバーレイバケットの有効化と設定 を参照してください。
CNEは2つのオーバーレイワークフローをサポートしています。
オーバーレイの仕組み
オーバーレイが有効になっている場合、初期化コンテナはポッドの起動時にオーバーレイバケットからファイルをダウンロードし、Liferayランタイムファイルシステムにコピーします。
オーバーレイファイルは起動時にコンテナにレイヤー化され、別のボリュームには永続化されません。
オーバーレイバケットはプロジェクトごとに一度だけプロビジョニングされ、そのプロジェクト内のすべての環境で共有されます。 オーバーレイをエンドツーエンドで有効にするには、プロジェクトレベルのバケット、そのバケットへのプロジェクトレベルのアクセス、およびデフォルトでは無効になっている liferay.yamlの環境ごとのオーバーレイ処理の切り替えという 3 つの個別の設定が必要です。
オーバーレイバケットを有効化して構成する
オーバーレイワークフローを設定する前に、プロジェクトのオーバーレイバケットをプロビジョニングし、環境にアクセス権限を付与してください。 プロジェクトごとにこれらの手順を一度だけ実行してください。
オーバーレイバケットを作成する
liferay/projects/<projectId>/project.yamlで、オーバーレイバケットを有効にします。
オーバーレイ:
有効: true
この設定のデフォルト値は false です。 project.yamlで`overlay.enabled` を`true`に設定すると、プロジェクトのオーバーレイ用 Google Cloud Storage バケットがプロビジョニングされ、バージョン管理が有効化され、バケットレベルでの一元的なアクセス権限が設定され、ストレージクラスは「STANDARD」となります。
overlay.forceDestroy のデフォルト値は false です。 バケット リソースが削除されたときにバケットの内容を削除するには、これを true に設定します。
overlay.forceDestroy を trueに設定すると、バケット リソースを削除すると、その中のすべてのオーバーレイ アーティファクトが削除されます。 回復の見込みはない。
project.yaml を GitOps リポジトリにコミットしてプッシュします。 Argo CD は、プロジェクト スコープのリソース アプリケーション (名前空間 liferay-<projectId>-resources、例えば liferay-acme-resources) を介してバケットをプロビジョニングします。これは、デプロイメントの残りの部分で使用される環境ごとのアプリケーション 名前空間とは別です。
オーバーレイアクセスを許可する
プロジェクトの基本ファイル liferay/projects/<projectId>/base/infrastructure.yamlで、環境にバケットへの読み取りアクセス権を付与します。
オーバーレイ:
有効: true
この設定もデフォルトで false になります。 プロジェクトの基本ファイルで設定すると、プロジェクト内のすべての環境に一度に適用され、各環境の Google サービス アカウントに、プロジェクト バケットに対する読み取り専用の roles/storage.objectViewer ロールが付与されます。 あるプロジェクトのPodは、別のプロジェクトのオーバーレイバケットにアクセスできません。
この設定は project.yamlの設定と同じ名前ですが、2 つの設定は独立しています。 project.yaml の値はバケットをプロビジョニングし、 base/infrastructure.yaml の値は環境にバケットへのアクセスを許可します。 両方設定してください。
個々の環境が兄弟環境とは異なるオーバーレイ アクセスを使用する必要がある場合は、プロジェクトの基本ファイルではなく、その環境独自の infrastructure.yaml で オーバーレイ をオーバーライドします。
変更内容をコミットして、GitOpsリポジトリにプッシュしてください。 Argo CDは、新しいアクセス権限に基づいてすべての環境を同期します。
プロジェクトで以前に環境ごとのオーバーレイバケットを使用していた場合、その内容は新しいバケットにコピーされません。 既存のカスタマイズ設定を新しい場所に再アップロードしてください。
手動オーバーレイワークフロー
オーバーレイバケットを探します
Google Cloud Console を開き、 Cloud Storage → Buckets に移動します。
プロジェクトに関連付けられているバケットを探してください。 オーバーレイ バケット名には、 -overlay- に続いてプロジェクト ID と生成されたサフィックスが含まれます。たとえば、 my-deployment-overlay-acme-2225eb のようになります。
カスタマイズをアップロードする
バケット内に最上位フォルダを作成し、カスタマイズしたファイルをアップロードしてください。
例:
overlay_test_1/
└── osgi/
└── client-extensions/
オーバーレイを設定する
環境固有の liferay.yaml (liferay/projects/<projectId>/environments/<environmentId>/liferay.yaml) で、オーバーレイを設定します。
liferay-default:
overlay:
copy:
- from: overlay_test_1/osgi/client-extensions/*
into: osgi/client-extensions
enabled: true
オーバーレイ構成リファレンス
| 財産 | 説明 |
|---|---|
有効: true | ポッド起動時のオーバーレイ処理を有効にする |
コピーから | オーバーレイバケット内のソースパス |
コピーする。 | Liferayコンテナ内の宛先パス |
バケット名は環境変数 LIFERAY_OVERLAY_BUCKET_NAME を通じて検出され、プラットフォームチャートがストレージプロバイダーを設定します。 上記のプロパティのみを設定してください。
設定変更をコミットして、GitOpsリポジトリにプッシュしてください。
Argo CDは環境を同期し、オーバーレイ構成を適用します。
自動化されたオーバーレイワークフロー(GitOpsとCI)
オーバーレイバケットを探します
-
プロジェクトのリソース名前空間に切り替えます。
kubens liferay-<projectId>-リソース -
オーバーレイバケットリソースを一覧表示します。
kubectl get buckets.storage.gcp.m.upbound.io --selector app=liferay,project-id=<projectId>出力例:
名前 同期済み 準備完了 外部名 経過時間 my-deployment-overlay-acme-2225eb True True my-deployment-overlay-acme-2225eb 22時間
EXTERNAL-NAME の値をバケット名として使用します。
CI認証の設定
AWS環境とは異なり、GCP環境ではオーバーレイ用のCIアップロード認証情報は自動的にプロビジョニングされません。
ワークロードIDフェデレーション(WIF)を使用して、認証を別途設定します。
-
CIアップロード用のGoogleサービスアカウントを作成する:
liferay-ci-uploader@PROJECT_ID.iam.gserviceaccount.com -
サービスアカウントにオーバーレイオブジェクトのアップロード権限を付与します。
gcloud storage buckets add-iam-policy-binding gs://${GCS_BUCKET_NAME} \ --member="serviceAccount:liferay-ci-uploader@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectCreator" -
CIプロバイダー向けにワークロードIDフェデレーションを設定します。
詳細については、 GitHub Actions を使用したワークロード ID フェデレーション を参照してください。
カスタマイズの作成とアップロード
以下のGitHub Actionsシークレットを設定してください。
| 秘密 | 説明 |
|---|---|
GCP_WIF_PROVIDER | ワークロードIDプロバイダーの完全なリソース名 |
GCP_CI_UPLOADER_SA | CIアップローダーのGoogleサービスアカウントのメールアドレス |
GCS_BUCKET_NAME | プロジェクトオーバーレイバケット名(プレフィックス gs:// を除く) |
ワークフローの例:
名前: CNE Workspace Build
実行環境: [push]
権限:
コンテンツ: 読み取り
IDトークン: 書き込み
ジョブ:
ビルド:
実行環境: ubuntu-latest
ステップ:
- 使用環境: actions/checkout@v4
- 名前: JDK 11 のセットアップ
uses: actions/setup-java@v4
with:
java-version: "11"
distribution: "adopt"
- name: Build with Gradle
run: cd workspace/ && ./gradlew build deploy
- name: Authenticate to GCP
uses: google-github-actions/auth@v2
with:
workload_identity_provider: ${{ secrets.GCP_WIF_PROVIDER }}
service_account: ${{ secrets.GCP_CI_UPLOADER_SA }}
- name: Upload customizes to GCS bucket
run: |
gcloud storage cp \
--recursive \
workspace/bundles/osgi/ \
gs://${{ secrets.GCS_BUCKET_NAME }}/workspace_build_${{ github.run_number }}/
オーバーレイを設定する
liferay/projects/<projectId>/environments/<environmentId>/liferay.yamlで、アップロードしたアーティファクトを使用するようにオーバーレイを設定します。
liferay-default:
overlay:
copy:
- from: "workspace_build_1/osgi/client-extensions/*"
into: osgi/client-extensions
enabled: true
ワイルドカードパターンが含まれている場合、 の値を から引用符で囲みます。 例えば、 "workspace_build_1/osgi/client-extensions/*"。
変更内容をコミットして、GitOpsリポジトリにプッシュしてください。
Argo CDは環境を同期し、オーバーレイ構成を適用します。
オーバーレイ展開を確認する
オーバーレイ初期化コンテナのログを確認してください。
kubectl logs liferay-default-0 -c liferay-overlay
初期化コンテナは各ステップを JSON 行としてログに記録し、 rclone を --use-json-logとともに呼び出します。そのため、コピー操作自体もこの 2 行の間に JSON でログに記録されます。 出力例:
{"メッセージ": "\":gcs,env_auth=true:my-deployment-overlay-acme-2225eb/workspace_build_1/osgi/client-extensions\" から \"/temp/osgi/client-extensions\"へコピーしています。"、 "スクリプト": "overlay-sync.sh"、 "重要度": "INFO"、 "タイムスタンプ": "2026-01-01T00:00:00Z"}
...
{"メッセージ": "コピーが正常に完了しました。"、 "スクリプト": "overlay-sync.sh"、 "重要度": "INFO"、 "タイムスタンプ": "2026-01-01T00:00:01Z"}
注記
オーバーレイファイルは、ポッドの起動時に適用されます。 更新されたオーバーレイコンテンツを適用するには、ポッドを再起動してください。