アイテムの展開

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

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

このトピックでは、Docker上のSitecoreアイテムパッケージとデプロイ自動化戦略について説明します。使用するアイテムシリアライゼーションツールによって方法はいくつかあります。

Sitecore CLIおよびSitecoreコンテンツシリアライズ

Sitecore CLIは、リモートのSitecoreインスタンスとのスクリプト化されたやり取りに最適化されています。継続的インテグレーションプロセス中にアイテムのパッケージ化に使用でき、デプロイやデリバリーのプロセス中にパッケージをインストールすることもできます。Sitecore CLIを用いてSitecore環境へのアイテム展開を自動化するのは、コンテナ使用時も同じです。

Sitecore CLIのドキュメントには詳細が記載されており、SitecoreモジュールリファレンスにはCMコンテナイメージに必要なSitecore Management Servicesモジュールをインストールする方法が記載されています。

Sitecore TDS

Sitecore TDSにはアイテムのパッケージ化やデプロイを促進する組み込みツールがいくつかあります。一般的なアプローチとしては、これらのツールを使ってソリューション構築時にアイテムパッケージを作成し、Sitecoreランタイムイメージを構築する際にそれらをContent Management (CM)イメージに追加するというものです。

Helix。GitHubのサンプルリポジトリには完全な例があります。

Sitecore TDSプロジェクト構成

この例は、Build OutputWebDeploy Packagesという2つのSitecore TDS機能を利用しています。これらはTDSプロジェクトのプロパティページで設定されています:

  • ビルド出力パス - ビルド ページにあり、 Release ビルド設定を設定します。すべてのプロジェクトで共有されるパスTDS指定します。例では、これは ..\..\TdsGeneratedPackages\Release\に設定されています。
  • ビルドWebDeployパッケージ - WebDeployパッケージページにあり、Releaseビルド設定を選択してください。Package Nameを指定します。コードおよびアイテムパッケージオプションは「アイテムのみパッケージ」を選択します。

以下は、TDSプロジェクトを適切に設定していることを前提にしています。

ソリューションビルドで設定

Sitecore TDS Dockerまたはクラウドビルドの環境変数のライセンスが必要です:

  • ソリューションビルドDockerfileでは、コードコンパイルとビルドステージの最初にこれらの項目をARG宣言してください(例ではbuilder ):

    ARG TDS_Owner ARG TDS_Key

    Dockerfile内の位置はスコープARG重要です。もし前のビルド段階でこれらを宣言すると、builder段階で使われた値は空になります。また、ARGは画像作成にのみ使われるため、ENVではなく使われていることにも注意してください。

    これらの値はdocker-compose.override.ymlファイル内のsolutionサービスとして入力されます。例えば:

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

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

    RUN msbuild /p

    =Release

    ビルド出力はTDSプロジェクトで指定された位置( Build Output Path)に着地します。 builderのWORKDIRに対してです。例では、これはビルド出力が次のことを意味します。

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

    builder段階から最終画像にコピーし、次の構造で作成します。

    • \artifacts\website
    • \artifacts\packages
    • \artifacts\transforms
  • 最終指示は以下のように調整できます:

    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の組み込み機能を使用しています。ただし、このイメージを使ってコンテナを作成するたびにこの現象が発生することに注意してください:

    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

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

    このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

    cmd /C icacls .\temp\WebDeployItems /grant 'IIS AppPool\DefaultAppPool:(OI)(CI)M';

  • オプション2

    tooling画像のDeploy-TdsWdpPackages.ps1スクリプトを使いましょう。パッケージと一緒にコピーしてください:

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

    その後、以下のスクリプトでコンテナ上でオンデマンドでDeploy-TdsWdpPackages.ps1を呼び出すことができます:

    docker exec powershell -command "C:\install\Deploy-TdsWdpPackages.ps1"

ユニコーン

!重要Unicornはサードパーティ製のオープンソースツールであり、Sitecoreサポートによってはサポートされていません。これらの指示は、Unicornユーザーの便宜のためにあくまでガイダンスとして提供されています。

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

以下の手順は、すでにDockerを使ってソリューションを構築し、カスタムSitecoreイメージを作成していることを前提としています。 Helixを参照してください。GitHubのサンプルリポジトリ で完全な例があります。

解決策のアーティファクトにシリアル化されたアイテムを追加してください

Unicornを使う場合、通常はシリアル化されたアイテムをSitecoreソリューションソース内に配置し、Unicorn構成で定義された構造で整理します。これはおそらくSitecore Helix手法に従うこともあります。これらのシリアライズされたアイテムはソリューションビルド中にコピーできますが、ディレクトリ構造を保持することが重要です。Robocopyはこれを実現する簡単な選択肢の一つです:

Copy serialized items, retaining directory structure

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

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

RUN Invoke-Expression 'robocopy C:\build\src C:\out\items /s /ndl /njh /njs *.yml'

... later in your artifacts build stage

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

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

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共有秘密を埋める必要があります。

    $ScriptPath = Split-Path $MyInvocation.MyCommand.Path Import-Module $ScriptPath\Unicorn.psm1 Sync-Unicorn -ControlPanelUrl 'http://localhost/unicorn.aspx' -SharedSecret $env

    _SHARED_SECRET

  3. CM Dockerfileで、このフォルダとシリアライズされたアイテムのアーティファクトをコピーし、後でUnicornの設定に使える環境変数を設定します:

    Set the default location for serialized items

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

    このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

    This value will be used in our Unicorn configuration

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

    このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

    ENV ITEM_SYNC_LOCATION c:\items

    Copy serialized items and Unicorn sync script

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

    このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

    COPY --from=solution \artifacts\items\ \items\ COPY .\unicorn \unicorn\

UnicornとDocker環境の設定をしてください

ユニコーン同期に使用されるベースファイルシステムパスは通常、Sitecore設定時に「sourceFolder」と呼ばれるsc.variableを使って設定されます:

  1. 上記の環境変数からこの値を入力Dockerfile。

    <sc.variable name="sourceFolder" value="$(env

    _SYNC_LOCATION)" />

  2. 環境変数からUnicorn共有の秘密も入力し、前回の環境変数と同じ環境変数を使えるようにsync.ps1 :

    $(env:UNICORN\_SHARED\_SECRET)
  3. この環境変数をdocker-compose.override.ymlで定義し、.env:

    cm: ... environment: UNICORN_SHARED_SECRET: ${UNICORN_SHARED_SECRET}

    UNICORN_SHARED_SECRET=your-secret-here

同期を実行してください

この時点で、ユニコーンとアイテム同期を発動するために必要なものはすべて揃っています:

  • CMコンテナのファイルシステム上のシリアライズされた項目
  • Unicornはこのパスをアイテムソースとして使用するように設定しています
  • 環境変数によって構成されたユニコーンの共有秘密
  • 同期をトリガーするPowerShellスクリプト

アイテムを手動でデプロイする場合、または配送パイプライン内でのどちらであっても、docker execまたは本番コンテナオーケストレーター内の同等のツールをご利用ください:

docker exec powershell -command "c:\unicorn\sync.ps1"

さらなる参考文献

この記事を改善するための提案がある場合は、 お知らせください!