構成変換の適用

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

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

Sitecoreの実装では、多くの場合、Sitecore設定のパッチ適用では変更できない設定ファイル ( Web.configConnectionStrings.configDomains.configLayers.configなど) の変更が必要になります。このような場合は、代わりにXDT変換ファイル を使用します。

このトピックでは、Sitecore Dockerイメージをビルドするときに、これらのXDTベースの設定変換を適用する方法を示します。変換ファイルは、ソリューション内に配置することも、特定のSitecoreロールのDockerfileに対してローカルにすることもできます。この例では、Sitecore Experience Management (XM1) インスタンスを使用します。

Docker Examplesリポジトリをクローンする

Docker Examplesリポジトリをマシン上の場所 (C:\sitecore\docker-examples\など) にクローンしていない場合は、クローンします (この例ではこのフォルダを使用します)。この例では、custom-imagesフォルダーを使用します。

サンプルの準備

custom-imagesの例を実行するには、いくつかの準備が必要です。まだ行っていない場合は、準備手順に従うか、付属のinit.ps1スクリプトを実行して、次の準備手順を自動的に実行します。

  • PowerShell管理者プロンプトを開き、custom-imagesフォルダーに移動して、次のコマンドを実行し、-LicenseXmlPathをSitecoreライセンス ファイルの場所に置き換えます。

    RequestResponse
    .\init.ps1 -LicenseXmlPath C:\License\license.xml

Dockerの例の変換ファイル

Docker Examplesソリューションには、カスタムDocker-Examples HTTPヘッダーが操作されるWeb.configの2つのXDT構成変換ファイルが含まれています。custom-imagesフォルダーに移動し、次の変換ファイルを確認します。

  • \src\DockerExamples.Website\Web.config.xdt

    この変換ファイルはソリューション内にあるため、Sitecoreのコア ロール (XM1トポロジのCMとCD) allに適用されます。これは、ソリューション変換の例です。ここでは、Docker-Examples HTTPヘッダーが追加され、次のように設定されますSolution transform

    RequestResponse
    <?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Docker-Examples" xdt:Locator="Match(name)" value="Solution transform" xdt:Transform="InsertIfMissing" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    </configuration>
  • \docker\build\cm\transforms\Web.config.xdt

    この変換ファイルは、cmサービスに対してローカルなdocker\buildフォルダーにあります。これは、ロール変換の例です。Docker-Examples HTTPヘッダーを次のように変更Role transform

    RequestResponse
    <?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <add name="Docker-Examples" xdt:Locator="Match(name)" value="Role transform" xdt:Transform="SetAttributes(value)" />
          </customHeaders>
        </httpProtocol>
      </system.webServer>
    </configuration>
先端

複数の変換を適用する場合は、操作の順序を考慮することをお勧めします。ただし、変換は毎回新しい構成ファイルに適用されるため、べき であることを確認する必要はありません。

この例では、最初にソリューション変換を適用し、次にロール変換を適用します。

ソリューションの変革

Sitecoreのコア ロールに適用される設定変換allソリューション構造に直接保存します。

次の例では、専用のソリューション ビルド成果物を使用して、ソリューション変換を収集して適用します。このアプローチの利点は、同じ設定ファイルに対して複数の変換をサポートすることであり、これはSitecore Helixソリューションでよく使用されます。

たとえば、レイヤー間で複数のWeb.config変換を持つことができます。

  • \src\Foundation\Module Name\website\Web.config.xdt

  • \src\Feature\Module Name\website\Web.config.xdt

  • \src\Project\Module Name\website\Web.config.xdt

この設定では、これらすべてをビルド出力に含めると (つまり、Build ActionContentに設定されている場合)、最終的に1つだけが出力に含まれ、最終的に適用されます。代わりに、これらの各ファイルを除外でき (つまり、Build Action Noneに設定されます)、ソリューション ビルド イメージに個別に収集されます。

また、変換ファイルをメイン ビルド出力に保持し、Webルートでインプレース変換を実行することもできます。ただし、同じ設定ファイルに対する複数の変換はサポートされていません。

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

custom-imagesフォルダに移動し、そこにあるDockerfileを確認します。

変換ファイル(拡張子.xdt )がbuilderステージ内で収集され、C:\out\transformsでドロップされていることがわかります。ここでは、robocopy ( /sフラグと共に) を使用するのは、フォルダー構造を保持するため、重要です。

RequestResponse
RUN Invoke-Expression 'robocopy C:\build\src C:\out\transforms /s /ndl /njh /njs *.xdt'

これはmsbuildの前に行われるため、ビルド出力から除外されていない追加の .xdtファイルを取得する必要はありません。次に、これらのファイルはbuilder段階から次の構造で最終画像にコピーされます \artifacts\transforms:

RequestResponse
COPY --from=builder C:\out\transforms .\transforms\

Sitecoreランタイム イメージに適用

ランタイムイメージに変換を適用するには:

  1. cmサービスのSitecoreランタイムDockerfileを開きます。収集されたばかりの解の変換がコピーされ、\transforms\solution\に到達していることがわかります。

    RequestResponse
    COPY --from=solution \artifacts\transforms\ \transforms\solution\
  2. 開発ツールはtooling画像から( C:\toolsに)コピーされ、Invoke-XdtTransform.ps1スクリプトを使用して変換が適用されます。

    RequestResponse
    COPY --from=tooling \tools\ \tools\
    RUN C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath C:\transforms\solution\DockerExamples.Website

Invoke-XdtTransform.ps1スクリプトは、-Pathパラメーターと -XdtPathパラメーターの2つのフォルダーを受け入れます。フォルダを使用する場合:

  • -XdtPathのフォルダ構造が一致している必要があります-Path

  • -XdtPathにあるtransformファイルには、設定に一致する名前を付け、.xdtファイル拡張子を追加する必要があります

この場合、-PathC:\inetpub\wwwrootの現在のWORKDIRであり、-XdtPathは1つのVisual Studio Websiteプロジェクトのルートです。

Helix ソリューションの例

Docker Examplesソリューションは、1つのWebsiteプロジェクトを含む簡単な例です。 Sitecore Helixのプラクティスに従う実際のソリューションでは、ネストされたフォルダー構造と レイヤーの優先度 ( Project, Feature, Foundationなど) を反映するように変換コマンドを調整する必要があります。

RequestResponse
RUN Get-ChildItem C:\transforms\solution\Foundation\*\website | ForEach-Object { & C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath $_.FullName }; `
    Get-ChildItem C:\transforms\solution\Feature\*\website | ForEach-Object { & C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath $_.FullName }; `
    Get-ChildItem C:\transforms\solution\Project\*\website | ForEach-Object { & C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath $_.FullName };

別の方法: メイン ビルド出力で変換ファイルを使用する

変換ファイルは、他のすべてのファイルと共にメイン ビルド出力に保持できます。このアプローチの欠点は、同じ構成ファイルに対して複数の変換をサポートしていないことですが、ソリューション ビルドDockerfileとイメージがなく、代わりに従来のビルドに依存している場合は、これが唯一のオプションになる可能性があります。

次に例を示します。

RequestResponse
RUN $xdts = [System.Collections.ArrayList]@(); `
    $xdts.AddRange(@(Get-ChildItem -Path .\*.xdt)); `
    $xdts.AddRange(@(Get-ChildItem -Path .\App_Config\*.xdt -Recurse)); `
    $xdts | ForEach-Object { & C:\tools\scripts\Invoke-XdtTransform.ps1 -Path $_.FullName.Replace('.xdt', '') -XdtPath $_.FullName }; `
    $xdts | ForEach-Object { Remove-Item -Path $_.FullName };

Invoke-XdtTransform.ps1スクリプトは、一致する設定ファイルと変換ファイルをパラメータとして受け入れます。

この例では、WebルートとApp_Configフォルダーで .xdtファイルを検索し、それらをInvoke-XdtTransform.ps1スクリプトに渡して、.xdtファイルを削除します。

ロールの変換

特定のSitecoreロールにのみ適用される設定変換は、そのロールの専用docker\buildフォルダー内に保存できます。

docker\buildフォルダに追加

cmサービスのdocker\buildフォルダに移動します。このロールには、追加のtransformsフォルダーがあることに注意してください。

RequestResponse
build
    cm
        transforms
            Web.config.xdt
        Dockerfile

Web.config.xdt変換は1つありますが、この変換には、cmの役割に必要な他の変換を含めることができます。ソリューション変換の場合と同様に、ターゲットのフォルダー構造に一致するように変換ファイルを構造化します。

次に、これらの変換をロールのSitecoreランタイムDockerfileに適用します。

Sitecoreランタイム イメージに適用

cmサービスのSitecoreランタイムDockerfileでは、transformsフォルダーの内容がDockerビルド コンテキストからコピーされ、次の場所に配置されていることを確認できます\transforms\role\

RequestResponse
COPY .\transforms\ \transforms\role\

変換は、同じInvoke-XdtTransform.ps1スクリプトを使用して、ソリューション変換の後に適用されます。

RequestResponse
RUN C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath C:\transforms\role

Docker Examplesソリューションの実行

Docker Examplesソリューションを実行するには、次のようにします。

  1. cdサービスのSitecoreランタイムDockerfileを開きます (例: C:\sitecore\docker-examples\custom-images\docker\build\cd\Dockerfile)。cdサービスにはソリューション変換がありますが、ロール変換はないことがわかります。

  2. PowerShellプロンプトを開き、custom-imagesフォルダーに移動します。Docker Compose upコマンドを使用してDocker Examplesを実行します。

    RequestResponse
    docker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml up -d
    メモ

    docker compose -f docker compose.xm1.yml -f docker compose.xm1.override.ymlコマンドに注意してください。この例ではSitecore Experience Management (XM1) インスタンスを使用しているため、docker composeコマンドは -fフラグを持つxm1 Composeファイルを明示的に参照しています。デフォルトのComposeファイルはXP0です。

    Sitecore Experience Management (XM1)コンテナには、次の方法でアクセスできます。

  3. インスタンスが稼働しているときは、ブラウザの開発者ツールを使用してHTTPヘッダーを検査できます。変換の例にあるDocker-Examplesカスタム ヘッダーを確認できます。

    cmサイトにはRole transformと表示され、cdサイトにはSolution transformと表示されます。

実行中のコンテナに更新を適用する

実行中のコンテナに更新を適用するには:

  1. サンプルWeb.config.xdtファイルのいずれかに変更します。たとえば、ソリューション変換valueMy transformに変更します。

  2. 次のコマンドを実行して、実行中のコンテナに適用された変更を確認します。

    RequestResponse
    docker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml up --build -d

    また、より選択的になり、影響を受けるコンテナのみをビルドすることもできます。

    RequestResponse
    docker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml build solution cm cd
    docker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml up -d

    どちらの場合も、upコマンドが呼び出されると、Dockerはcm Windowsコンテナとcdコンテナのみを再作成します。残りのロールは引き続き実行されます。

  3. 終了したら、downコマンドを使用してコンテナを停止して取り外します。

    RequestResponse
    docker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml down
先端

構成変換を積極的に開発している場合は、https://webconfigtransformationtester.apphb.com/ などの変換テスト ツールを使用してフィードバック ループを短縮すると便利です。

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

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