アイテムのデプロイ

Version: 10.1
日本語翻訳に関する免責事項

このページの翻訳は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 を宣言します。

    RequestResponse
    ARG TDS_Owner
    ARG TDS_Key

    ARG スコープの関係で Dockerfile 内の位置が重要になります。これらを以前のビルド ステージで宣言した場合、builder ステージで使用したときに値は空になります。また、これらの値はイメージの構築にのみ使用されるため、ARGENV の代わりに使用されていることにも注意してください。

    これらの値は、docker-compose.override.yml ファイルの solution サービス用に設定されます。次に例を示します。

    RequestResponse
    solution:
      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_OWNERTDS_KEY の値は、環境ファイル (.env) に指定できますが、通常は、ローカル開発マシンでシステム環境変数として指定したり、 セキュリティ上の理由でビルド サーバーでシークレットとして指定したりします。

  • ソリューションビルドの Dockerfile では、msbuild 命令を簡略化できます。また、代わりに TDS プロジェクトで設定されたビルド出力に依存することもできます。

    RequestResponse
    RUN msbuild /p:Configuration=Release

    ビルド出力は、builderWORKDIR からの相対的な、TDS プロジェクトで指定された場所 (ビルド出力パス) に配置されます。この例では、これはビルド出力が以下のようになることを意味しています。

    • \build\TdsGeneratedPackages\Release (ファイル)

    • \build\TdsGeneratedPackages\WebDeploy_Release (WDP アイテム パッケージ)

    builder ステージから最終イメージへと次の構造でコピーします。

    • \artifacts\website

    • \artifacts\packages

    • \artifacts\transforms

  • 最終的な命令を次のように調整できます。

    RequestResponse
    WORKDIR 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 の組み込み機能を利用しています。ただし、このイメージを使用してコンテナーを作成するたびにデプロイが実行されることに注意してください。

    RequestResponse
    COPY --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: オンデマンドでのデプロイ

    toolingDeploy-TdsWdpPackages.ps1 スクリプトを使用します。パッケージと一緒にコピーしてください。

    RequestResponse
    COPY --from=tooling \tools\scripts\Deploy-TdsWdpPackages.ps1 \install\Deploy-TdsWdpPackages.ps1
    COPY --from=solution \artifacts\packages\ \install\packages\

    次に、以下のスクリプトを使用し、コンテナー上で Deploy-TdsWdpPackages.ps1 をオンデマンドで起動します。

    RequestResponse
    docker 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 があります。

RequestResponse
# 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 コンテナーからスクリプト同期を実行できるようにします。

  1. CM ビルド コンテキスト内の unicorn フォルダーには、Unicorn リモートスクリプトに必要なファイルが含まれている必要があります。

    • MicroCHAP.dll

    • Unicorn.psm1

    • カスタム sync.ps1

  2. この場合の 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
  3. 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 を使用して設定されます。

  1. 上記で定義した環境変数からこの値を設定します。この値は、上記で定義した環境変数から Dockerfile に入力することができます。

    RequestResponse
    <sc.variable name="sourceFolder" value="$(env:ITEM_SYNC_LOCATION)" />
  2. Unicorn の共有シークレットは環境変数からも入力できるので、上記の sync.ps1 で行ったのと同じ環境変数を使用できます。

    RequestResponse
    <authenticationProvider type="Unicorn.ControlPanel.Security.ChapAuthenticationProvider, Unicorn">
      <SharedSecret>$(env:UNICORN_SHARED_SECRET)</SharedSecret>
    </authenticationProvider>
  3. この環境変数を docker-compose.override.yml.env に定義します。

    RequestResponse
    cm:
        [...]
        environment:
          UNICORN_SHARED_SECRET: ${UNICORN_SHARED_SECRET}
    RequestResponse
    UNICORN_SHARED_SECRET=your-secret-here

同期を実行する

この時点で、Unicorn とのアイテム同期をトリガーするために必要なものはすべて揃っています。

  • CM コンテナーのファイルシステム上でシリアル化されたアイテム

  • このパスをアイテム ソースとして使用するように設定されたユニコーン

  • 環境変数で設定された Unicorn の共有シークレット

  • 同期をトリガするための PowerShell スクリプト

アイテムをデプロイしたいときは、手動であろうとデリバリー パイプライン内であろうと、docker exec を使用するか、本番用コンテナー オーケストレータ内で同等のものを使用します。

RequestResponse
docker exec <container> powershell -command "c:\unicorn\sync.ps1"

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、