アイテムのデプロイ
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このトピックでは、Sitecore アイテム パッケージと Docker でのデプロイの自動化戦略について説明します。使用するアイテム シリアル化ツールに応じて、これを行うさまざまな方法があります。
Sitecore CLI と Sitecore のコンテンツのシリアル化
Sitecore CLI は、リモートの Sitecore インスタンスとのスクリプトによるインタラクション用に最適化されています。継続的インテグレーション プロセス中にアイテムをパッケージ化し、デプロイおよび配信プロセス中にそれらのパッケージをインストールするために使用できます。Sitecore CLI を使用して Sitecore 環境へのアイテムのデプロイを自動化することは、コンテナーを使用する場合と異なりません。
Sitecore CLI のドキュメントに詳細が記載されており、必要な Sitecore Management Services モジュールを CM コンテナー イメージにインストールする方法が「Sitecore モジュール リファレンス」に記載されています。
Sitecore TDS™
Sitecore TDS には、アイテムのパッケージ化とデプロイを容易にする多くの組み込みツールがあります。一般的なアプローチは、ソリューション ビルド中にこれらのツールを使用してアイテム パッケージを作成し、Sitecore ランタイム イメージをビルドするときにそれらを Content Management (CM) イメージに追加することです。
GitHub の Helix.Examples リポジトリに完全な例があります。
Sitecore TDS プロジェクトの設定
この例では、Sitecore TDS の 2 つの機能として、ビルド出力と WebDeploy パッケージを使用しています。これらは、TDS プロジェクトのプロパティ ページに設定されています。
-
ビルド出力パス - 「ビルド」ページにあり、
Release
のビルド設定のために指定します。すべての TDS プロジェクトで共有されるパスを指定します。この例では、..\..\TdsGeneratedPackages\Release\
に設定しています。 -
ビルド WebDeploy パッケージ - 「WebDeploy パッケージ」ページにあり、
Release
のビルド設定のために選択します。パッケージ名 を指定し、[Code and Item Packaging Options (コードとアイテムのパッケージ オプション)] の [Item only Package (アイテムのみのパッケージ)] を選択します。
以下は、TDS プロジェクトが適切に設定されていることを前提としています。
ソリューションのビルドで設定する
Sitecore TDS には、Docker またはクラウド ビルド用のライセンス環境変数が必要です。
-
ソリューション ビルドの Dockerfile で、コードのコンパイルおよびビルド ステージ (この例では、
builder
) の最初に、これらのARG
を宣言します。RequestResponseARG TDS_Owner ARG TDS_Key
ARG
スコープの関係で Dockerfile 内の位置が重要になります。これらを以前のビルド ステージで宣言した場合、builder
ステージで使用したときに値は空になります。また、これらの値はイメージの構築にのみ使用されるため、ARG
がENV
の代わりに使用されていることにも注意してください。これらの値は、
docker-compose.override.yml
ファイルのsolution
サービス用に設定されます。次に例を示します。RequestResponsesolution: image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-solution:${VERSION:-latest} build: context: . args: BASE_IMAGE: ${SOLUTION_BASE_IMAGE} BUILD_IMAGE: ${SOLUTION_BUILD_IMAGE} TDS_Owner: ${TDS_OWNER} TDS_Key: ${TDS_KEY} scale: 0
TDS_OWNER
とTDS_KEY
の値は、環境ファイル (.env) に指定できますが、通常は、ローカル開発マシンでシステム環境変数として指定したり、 セキュリティ上の理由でビルド サーバーでシークレットとして指定したりします。 -
ソリューションビルドの Dockerfile では、
msbuild
命令を簡略化できます。また、代わりに TDS プロジェクトで設定されたビルド出力に依存することもできます。RequestResponseRUN msbuild /p:Configuration=Release
ビルド出力は、
builder
のWORKDIR
からの相対的な、TDS プロジェクトで指定された場所 (ビルド出力パス) に配置されます。この例では、これはビルド出力が以下のようになることを意味しています。-
\build\TdsGeneratedPackages\Release
(ファイル) -
\build\TdsGeneratedPackages\WebDeploy_Release
(WDP アイテム パッケージ)
builder
ステージから最終イメージへと次の構造でコピーします。-
\artifacts\website
-
\artifacts\packages
-
\artifacts\transforms
-
-
最終的な命令を次のように調整できます。
RequestResponseWORKDIR C:\artifacts COPY --from=builder \build\TdsGeneratedPackages\Release .\website\ COPY --from=builder \build\TdsGeneratedPackages\WebDeploy_Release .\packages\ COPY --from=builder C:\out\transforms .\transforms\
Sitecore CM ランタイム イメージに追加する
これでアイテムがパッケージ化されて、solution
イメージに含まれるようになったので、Sitecore ランタイム イメージの構築時に Content Management (CM) イメージに追加できます。
cm サービスの Dockerfile の最後に、アイテムパッケージをデプロイする命令を追加する必要があります。TDS には、これを処理するための 2 つのオプションがあります。
-
オプション1: コンテナー作成時のデプロイ
これにより、サイトの起動時に Sitecore TDS がアイテム パッケージをインストールできます。これは TDS の組み込み機能を利用しています。ただし、このイメージを使用してコンテナーを作成するたびにデプロイが実行されることに注意してください。
RequestResponseCOPY --from=solution \artifacts\packages\ \temp\ RUN Get-ChildItem -Path 'C:\\temp\\*.wdp.zip' | % { Expand-Archive -Path $_.FullName -DestinationPath 'C:\\temp' -Force; }; ` Move-Item -Path 'C:\\temp\\Content\\Website\\Bin\*' -Destination .\bin -Force; ` Move-Item -Path 'C:\\temp\\Content\\Website\\temp\*' -Destination .\temp -Force; ` Remove-Item -Path 'C:\\temp' -Recurse -Force; ` # Ensure TDS has permissions to delete items after install cmd /C icacls .\temp\WebDeployItems /grant 'IIS AppPool\DefaultAppPool:(OI)(CI)M';
-
オプション 2: オンデマンドでのデプロイ
tooling
のDeploy-TdsWdpPackages.ps1
スクリプトを使用します。パッケージと一緒にコピーしてください。RequestResponseCOPY --from=tooling \tools\scripts\Deploy-TdsWdpPackages.ps1 \install\Deploy-TdsWdpPackages.ps1 COPY --from=solution \artifacts\packages\ \install\packages\
次に、以下のスクリプトを使用し、コンテナー上で
Deploy-TdsWdpPackages.ps1
をオンデマンドで起動します。RequestResponsedocker exec <container> powershell -command "C:\install\Deploy-TdsWdpPackages.ps1"
Unicorn
Unicorn はサードパーティ製のオープン ソース ツールであり、Sitecore Support ではサポートされていません。これらの説明は、Unicorn ユーザーの便宜のためにガイダンスとしてのみ提供されています。
ここで説明する他のシリアル化ツールとは異なり、Unicorn には組み込みのパッケージ機能はなく、Sitecore プラットフォームのインプロセスで実行されます。そのため、Unicorn の設定でシリアライズされたアイテムは、同期先の Content Management インスタンスのファイル システム上に存在している必要があります。Docker を使用すると、コンテナーのビルド中にアイテムをコピーできるため、これを簡単に行うことができます。Unicorn には、アイテムの同期をトリガーするための PowerShell モジュールも用意されており、コンテナーを使用する際にアイテムのデプロイを自動化するのに役立ちます。
次の手順では、すでに Docker を使用してソリューションを構築し、カスタムの Sitecore イメージを作成していることを想定しています。完全な例については、GitHub の Helix.Examples リポジトリを参照してください。
ソリューション アーティファクトにシリアル化されたアイテムを追加する
Unicorn を使用する場合、シリアル化されたアイテムは、通常、Sitecore のソリューション ソース内に配置し、Unicorn 設定で定義された構造に整理します。これに伴って、Sitecore Helix のプラクティスに従う場合があります。ソリューションのビルド中に、これらのシリアル化されたアイテムをすべてコピーできますが、ディレクトリ構造を保持することが重要です。これを実現するための簡単なオプションとして、Robocopy があります。
# Copy serialized items, retaining directory structure
RUN Invoke-Expression 'robocopy C:\build\src C:\out\items /s /ndl /njh /njs *.yml'
# ... later in your artifacts build stage
WORKDIR C:\artifacts
COPY --from=builder c:\out\items .\items\
CM イメージにアイテムとデプロイ スクリプトを構築する
ソリューション イメージにビルド アーティファクトとしてのアイテムがあるので、前回 msbuild
出力で行ったのと同じように、これらのアイテムを CM イメージにコピーします。さらに、Unicorn リモーティングに必要なファイルを CM イメージに配置し、後で CM コンテナーからスクリプト同期を実行できるようにします。
-
CM ビルド コンテキスト内の
unicorn
フォルダーには、Unicorn リモートスクリプトに必要なファイルが含まれている必要があります。-
MicroCHAP.dll
-
Unicorn.psm1
-
カスタム
sync.ps1
-
-
この場合の
sync.ps1
スクリプトにはSync-Unicorn
の標準的な呼び出しが含まれており、環境変数を使用して Unicorn の共有シークレットを設定する必要があります。RequestResponse$ScriptPath = Split-Path $MyInvocation.MyCommand.Path Import-Module $ScriptPath\Unicorn.psm1 Sync-Unicorn -ControlPanelUrl 'http://localhost/unicorn.aspx' -SharedSecret $env:UNICORN_SHARED_SECRET
-
CM の Dockerfile で、このフォルダーとシリアル化アイテムのアーティファクトをコピーし、後で Unicorn を設定するために使用できる環境変数を設定します。
RequestResponse# Set the default location for serialized items # This value will be used in our Unicorn configuration ENV ITEM_SYNC_LOCATION c:\items # Copy serialized items and Unicorn sync script COPY --from=solution \artifacts\items\ \items\ COPY .\unicorn \unicorn\
Unicorn と Docker 環境の設定
Unicorn 同期に使用されるベース ファイルシステムのパスは、通常、Sitecore の設定で sourceFolder
という sc.variable
を使用して設定されます。
-
上記で定義した環境変数からこの値を設定します。この値は、上記で定義した環境変数から
Dockerfile
に入力することができます。RequestResponse<sc.variable name="sourceFolder" value="$(env:ITEM_SYNC_LOCATION)" />
-
Unicorn の共有シークレットは環境変数からも入力できるので、上記の
sync.ps1
で行ったのと同じ環境変数を使用できます。RequestResponse<authenticationProvider type="Unicorn.ControlPanel.Security.ChapAuthenticationProvider, Unicorn"> <SharedSecret>$(env:UNICORN_SHARED_SECRET)</SharedSecret> </authenticationProvider>
-
この環境変数を
docker-compose.override.yml
と.env
に定義します。RequestResponsecm: [...] environment: UNICORN_SHARED_SECRET: ${UNICORN_SHARED_SECRET}
RequestResponseUNICORN_SHARED_SECRET=your-secret-here
同期を実行する
この時点で、Unicorn とのアイテム同期をトリガーするために必要なものはすべて揃っています。
-
CM コンテナーのファイルシステム上でシリアル化されたアイテム
-
このパスをアイテム ソースとして使用するように設定されたユニコーン
-
環境変数で設定された Unicorn の共有シークレット
-
同期をトリガするための PowerShell スクリプト
アイテムをデプロイしたいときは、手動であろうとデリバリー パイプライン内であろうと、docker exec
を使用するか、本番用コンテナー オーケストレータ内で同等のものを使用します。
docker exec <container> powershell -command "c:\unicorn\sync.ps1"