構成変換の適用
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Sitecoreの実装では、多くの場合、Sitecore設定のパッチ適用では変更できない設定ファイル ( Web.config、ConnectionStrings.config、Domains.config、Layers.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 ActionがContentに設定されている場合)、最終的に1つだけが出力に含まれ、最終的に適用されます。代わりに、これらの各ファイルを除外でき (つまり、Build Action Noneに設定されます)、ソリューション ビルド イメージに個別に収集されます。
また、変換ファイルをメイン ビルド出力に保持し、Webルートでインプレース変換を実行することもできます。ただし、同じ設定ファイルに対する複数の変換はサポートされていません。
ソリューションビルドで構成する
custom-imagesフォルダに移動し、そこにあるDockerfileを確認します。
変換ファイル(拡張子.xdt )がbuilderステージ内で収集され、C:\out\transformsでドロップされていることがわかります。ここでは、robocopy ( /sフラグと共に) を使用するのは、フォルダー構造を保持するため、重要です。
RUN Invoke-Expression 'robocopy C:\build\src C:\out\transforms /s /ndl /njh /njs *.xdt'
これはmsbuildの前に行われるため、ビルド出力から除外されていない追加の .xdtファイルを取得する必要はありません。次に、これらのファイルはbuilder段階から次の構造で最終画像にコピーされます \artifacts\transforms:
COPY --from=builder C:\out\transforms .\transforms\
Sitecoreランタイム イメージに適用
ランタイムイメージに変換を適用するには:
-
cmサービスのSitecoreランタイムDockerfileを開きます。収集されたばかりの解の変換がコピーされ、\transforms\solution\に到達していることがわかります。
RequestResponseCOPY --from=solution \artifacts\transforms\ \transforms\solution\
-
開発ツールはtooling画像から( C:\toolsに)コピーされ、Invoke-XdtTransform.ps1スクリプトを使用して変換が適用されます。
RequestResponseCOPY --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ファイル拡張子を追加する必要があります
この場合、-PathはC:\inetpub\wwwrootの現在のWORKDIRであり、-XdtPathは1つのVisual Studio Websiteプロジェクトのルートです。
Helix ソリューションの例
Docker Examplesソリューションは、1つのWebsiteプロジェクトを含む簡単な例です。 Sitecore Helixのプラクティスに従う実際のソリューションでは、ネストされたフォルダー構造と レイヤーの優先度 ( Project, Feature, Foundationなど) を反映するように変換コマンドを調整する必要があります。
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とイメージがなく、代わりに従来のビルドに依存している場合は、これが唯一のオプションになる可能性があります。
次に例を示します。
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フォルダーがあることに注意してください。
build
cm
transforms
Web.config.xdt
Dockerfile
Web.config.xdt変換は1つありますが、この変換には、cmの役割に必要な他の変換を含めることができます。ソリューション変換の場合と同様に、ターゲットのフォルダー構造に一致するように変換ファイルを構造化します。
次に、これらの変換をロールのSitecoreランタイムDockerfileに適用します。
Sitecoreランタイム イメージに適用
cmサービスのSitecoreランタイムDockerfileでは、transformsフォルダーの内容がDockerビルド コンテキストからコピーされ、次の場所に配置されていることを確認できます\transforms\role\
COPY .\transforms\ \transforms\role\
変換は、同じInvoke-XdtTransform.ps1スクリプトを使用して、ソリューション変換の後に適用されます。
RUN C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath C:\transforms\role
Docker Examplesソリューションの実行
Docker Examplesソリューションを実行するには、次のようにします。
-
cdサービスのSitecoreランタイムDockerfileを開きます (例: C:\sitecore\docker-examples\custom-images\docker\build\cd\Dockerfile)。cdサービスにはソリューション変換がありますが、ロール変換はないことがわかります。
-
PowerShellプロンプトを開き、custom-imagesフォルダーに移動します。Docker Compose upコマンドを使用してDocker Examplesを実行します。
RequestResponsedocker 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)コンテナには、次の方法でアクセスできます。
-
Sitecoreコンテンツ管理(cm): https://cm.dockerexamples.localhost
-
Sitecore Content Delivery (cd): https://cd.dockerexamples.localhost
-
-
インスタンスが稼働しているときは、ブラウザの開発者ツールを使用してHTTPヘッダーを検査できます。変換の例にあるDocker-Examplesカスタム ヘッダーを確認できます。
cmサイトにはRole transformと表示され、cdサイトにはSolution transformと表示されます。
実行中のコンテナに更新を適用する
実行中のコンテナに更新を適用するには:
-
サンプルWeb.config.xdtファイルのいずれかに変更します。たとえば、ソリューション変換valueをMy transformに変更します。
-
次のコマンドを実行して、実行中のコンテナに適用された変更を確認します。
RequestResponsedocker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml up --build -d
また、より選択的になり、影響を受けるコンテナのみをビルドすることもできます。
RequestResponsedocker 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コンテナのみを再作成します。残りのロールは引き続き実行されます。
-
終了したら、downコマンドを使用してコンテナを停止して取り外します。
RequestResponsedocker compose -f docker compose.xm1.yml -f docker compose.xm1.override.yml down
構成変換を積極的に開発している場合は、https://webconfigtransformationtester.apphb.com/ などの変換テスト ツールを使用してフィードバック ループを短縮すると便利です。