アイテムのデプロイ

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

このページの翻訳は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 OptionsItem only Packageを選択します。

以下は、TDSプロジェクトが適切に構成されていることを前提としています。

ソリューションビルドで構成する

Sitecore TDSでは、Dockerまたはクラウド ビルドの環境変数をライセンスする必要があります。

  • ソリューション ビルドDockerfileで、コードのコンパイルとビルド ステージ (例ではbuilder ) の開始時に、これらのARGを宣言します。

    RequestResponse
    ARG TDS_Owner
    ARG TDS_Key

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

    これらの値は、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

    環境ファイル (.env) にTDS_OWNER値とTDS_KEY値を含めることができますが、通常は、ローカル開発マシンではシステム環境変数として、ビルド サーバーではシークレットとして指定します (セキュリティ上の理由から)。

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

    RequestResponse
    RUN msbuild /p:Configuration=Release

    ビルド出力は、builderWORKDIRに対してTDSプロジェクト (Build Output Path) で指定された場所に配置されます。この例では、ビルド出力は次のようになります。

    • \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ランタイム イメージをビルドするときに、それらをコンテンツ管理 (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: オンデマンドでデプロイする

    toolingイメージのDeploy-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はサードパーティのオープンソース ツールであり、Sitecoreサポートではサポートされていません。これらの手順は、Unicornユーザーの便宜のために、ガイダンスとしてのみ提供されています。

ここで説明する他のシリアル化ツールとは異なり、Unicornにはパッケージ化機能が組み込まれておらず、Sitecoreプラットフォームでインプロセスで実行されます。したがって、Unicorn設定のシリアル化されたアイテムは、同期するコンテンツ管理インスタンスのファイルシステムに存在する必要があります。Dockerを使用すると、コンテナのビルド中にアイテムをコピーできるため、これは簡単です。Unicornは、アイテムの同期をトリガーするPowerShellモジュール も提供しています。これは、コンテナを使用するときにアイテムのデプロイを自動化するのに便利です。

次の手順では、すでにDockerを使用してソリューションをビルドし、カスタムSitecoreイメージを作成していることを前提としています。完全な例については、GitHubのHelix.Examplesリポジトリ を参照してください。

シリアル化された項目をソリューション成果物に追加する

Unicornを使用する場合、通常、シリアル化されたアイテムをSitecoreソリューション ソース内に配置し、Unicorn設定で定義された構造に整理します。これは、Sitecore Helixのプラクティスに従う可能性があります。これらのシリアル化された項目はすべて、ソリューションのビルド中にコピーできますが、ディレクトリ構造を保持することが重要です。Robocopyは、これを実現するための簡単なオプションの1つです。

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 Remotingに必要なファイルを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コンテナのファイルシステム上のシリアル化された項目

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

  • 環境変数を介して設定されたユニコーン共有シークレット

  • 同期をトリガーするPowerShellスクリプト

アイテムをデプロイする場合は、手動または配信パイプライン内で、docker execを使用するか、運用コンテナオーケストレーター内で同等のものを使用します。

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

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

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