アイテムのデプロイ
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このトピックでは、DockerでのSitecoreアイテム パッケージとデプロイ自動化戦略について説明します。これを行うには、使用するアイテムのシリアル化ツールに応じて、さまざまな方法があります。
Sitecore CLIとSitecoreコンテンツのシリアル化
Sitecore CLIは、リモートSitecoreインスタンスとのスクリプト化された対話用に最適化されています。これは、継続的インテグレーション プロセス中にアイテムをパッケージ化したり、デプロイと配信のプロセス中にそれらのパッケージをインストールしたりするために使用できます。Sitecore CLIを使用したSitecore環境へのアイテムのデプロイの自動化は、コンテナを使用する場合も同じです。
Sitecore CLIドキュメントには詳細が記載されており、Sitecoreモジュール リファレンスには、CMコンテナ イメージに必要なSitecore Management Servicesモジュールのインストールに関する情報が記載されています。
サイトコアTDS
Sitecore TDSには、アイテムのパッケージ化とデプロイを容易にするツールが多数組み込まれています。一般的なアプローチは、これらのツールを使用してソリューションのビルド中にアイテム パッケージを作成し、Sitecoreランタイム イメージのビルド時にContent Management (CM) イメージに追加することです。
GitHubのHelix.Examplesリポジトリには、完全な例があります。
Sitecore TDSプロジェクトの設定
この例では、Sitecore TDSの2つの機能 ( ビルド出力 とWebDeployパッケージ) を利用しています。TDSプロジェクトのプロパティ ページで構成する設定は次のとおりです。
-
ビルド出力パス - Buildページにあり、Releaseビルド構成に対して設定します。すべてのTDSプロジェクトで共有されるパスを指定します。この例では、これは ..\..\TdsGeneratedPackages\Release\に設定されています。
-
WebDeploy パッケージのビルド- WebDeploy Packageページにあり、Releaseビルド構成にこれを選択します。Package Nameを指定し、Code and Item Packaging OptionsにItem only Packageを選択します。
以下は、TDSプロジェクトが適切に構成されていることを前提としています。
ソリューションビルドで構成する
Sitecore TDSでは、Dockerまたはクラウド ビルドの環境変数をライセンスする必要があります。
-
ソリューション ビルドDockerfileで、コードのコンパイルとビルド ステージ (例ではbuilder ) の開始時に、これらのARGを宣言します。
RequestResponseARG TDS_Owner ARG TDS_Key
Dockerfile内の場所は、スコープARGため重要です。代わりに、前のビルド ステージでこれらを宣言すると、builderステージで使用したときに値は空になります。また、ENVの代わりにARGが使用されているのは、イメージのビルドにのみ使用されるためであることに注意してください。
これらの値は、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
環境ファイル (.env) にTDS_OWNER値とTDS_KEY値を含めることができますが、通常は、ローカル開発マシンではシステム環境変数として、ビルド サーバーではシークレットとして指定します (セキュリティ上の理由から)。
-
ソリューション ビルドDockerfileでは、msbuild命令を簡略化し、代わりにTDSプロジェクトで構成されたビルド出力に頼ることができます。
RequestResponseRUN msbuild /p:Configuration=Release
ビルド出力は、builderのWORKDIRに対してTDSプロジェクト (Build Output Path) で指定された場所に配置されます。この例では、ビルド出力は次のようになります。
-
\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ランタイム イメージをビルドするときに、それらをコンテンツ管理 (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はサードパーティのオープンソース ツールであり、Sitecoreサポートではサポートされていません。これらの手順は、Unicornユーザーの便宜のために、ガイダンスとしてのみ提供されています。
ここで説明する他のシリアル化ツールとは異なり、Unicornにはパッケージ化機能が組み込まれておらず、Sitecoreプラットフォームでインプロセスで実行されます。したがって、Unicorn設定のシリアル化されたアイテムは、同期するコンテンツ管理インスタンスのファイルシステムに存在する必要があります。Dockerを使用すると、コンテナのビルド中にアイテムをコピーできるため、これは簡単です。Unicornは、アイテムの同期をトリガーするPowerShellモジュール も提供しています。これは、コンテナを使用するときにアイテムのデプロイを自動化するのに便利です。
次の手順では、すでにDockerを使用してソリューションをビルドし、カスタムSitecoreイメージを作成していることを前提としています。完全な例については、GitHubのHelix.Examplesリポジトリ を参照してください。
シリアル化された項目をソリューション成果物に追加する
Unicornを使用する場合、通常、シリアル化されたアイテムをSitecoreソリューション ソース内に配置し、Unicorn設定で定義された構造に整理します。これは、Sitecore Helixのプラクティスに従う可能性があります。これらのシリアル化された項目はすべて、ソリューションのビルド中にコピーできますが、ディレクトリ構造を保持することが重要です。Robocopyは、これを実現するための簡単なオプションの1つです。
# 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 Remotingに必要なファイルを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コンテナのファイルシステム上のシリアル化された項目
-
このパスをアイテムソースとして使用するように設定されたユニコーン
-
環境変数を介して設定されたユニコーン共有シークレット
-
同期をトリガーするPowerShellスクリプト
アイテムをデプロイする場合は、手動または配信パイプライン内で、docker execを使用するか、運用コンテナオーケストレーター内で同等のものを使用します。
docker exec <container> powershell -command "c:\unicorn\sync.ps1"