XM Cloud の Promote の動作確認

公開日 :

XM Cloud ではプロジェクトで複数の環境を用意して運用、開発をすることが可能です。今回は Promote の動作に関して確認をしていきます。

環境について

ブログで今回紹介をする環境は、XM Cloud の Production と Staging の2つの環境を用意して、Staging の環境を Promote をして Production に反映する内容を確認します。

前提条件として、Sitecore XM Cloud Deploy にアクセスをして環境を参照した時、Production の環境は GitHub のリポジトリとつながっていてはいけません。今回は下記のように staging は利用しているが、main はつなげていない、という形としました。

random desc

Production に関しては Content Editor を立ち上げて、ホームのプロモーションのアイテムである、 /sitecore/content/sitecoredemo-jp/sitecoredemo-jp/Home/Data/PromoLeft を選択します。このアイテムの Text2 のフィールドに以下の HTML のデータを設定します。

<p>Production Text 2</p>

続いて Promo に関しては withText がコードとしては実装されているため、表示方法の変更ということで、/sitecore/content/sitecoredemo-jp/sitecoredemo-jp/Presentation/Headless Variants/Promo/Default のアイテムをコピーして WithText というバリアントを追加します。

random desc

コンテンツエディターでの変更はこれで終了、次は Pages を開いて該当するアイテムの部分を選択して、バリアントを WithText に変更してください。

random desc

続いて Staging にも同様の手順を進めていきますが、Text 2 のアイテムに設定するテキストを以下のようにします。

<p>Staging Text 2</p>

現在の段階で異なるのは、Text 2 のコンテンツのデータが Production と Staging で異なる、という1点だけです。

random desc

Staging の環境を変更する

今回設定をしている Promo コンテンツは、src\sxastarter\src\components\Promo.tsx にあるコンポーネントを利用しています。このコンポーネントの中に、WithText を指定した場合、以下のコードが呼び出されます。

export const WithText = (props: PromoProps): JSX.Element => {
  const id = props.params.RenderingIdentifier;
  if (props.fields) {
    return (
      <div className={`component promo ${props.params.styles}`} id={id ? id : undefined}>
        <div className="component-content">
          <div className="field-promoicon">
            <JssImage field={props.fields.PromoIcon} />
          </div>
          <div className="promo-text">
            <div>
              <div className="field-promotext">
                <JssRichText className="promo-text" field={props.fields.PromoText} />
              </div>
            </div>
            <div className="field-promotext">
              <JssRichText className="promo-text" field={props.fields.PromoText2} />
            </div>
          </div>
        </div>
      </div>
    );
  }

  return <PromoDefaultComponent {...props} />;
};

今回は検証ができればいいので、PromoText と PromoText2 の表示の順番を以下のように変更します。

          <div className="promo-text">
            <div className="field-promotext">
              <JssRichText className="promo-text" field={props.fields.PromoText2} />
            </div>
            <div>
              <div className="field-promotext">
                <JssRichText className="promo-text" field={props.fields.PromoText} />
              </div>
            </div>
          </div>

このコードを GithHub 経由で staging のコードに反映させます。しばらくするとコンポーネントが有効になって、表示する順番が入れ替わります。

random desc

Promote を実行する

XM Cloud Deploy ツールを利用して、Staging の環境で構築できている構成を確認します。実際には以下のような画面となっており、Promote を右上で選択することが可能です。

random desc

Promote のボタンをクリックすると、以下のようにどれに Promote するのかの画面が表示されます。今回は、Staging を Production にするため、下記のような画面となります。

random desc

Deploy のボタンをクリックすると、以下のように展開を開始します。

random desc

しばらくすると環境が出来上がり、Pages にアクセスをすると以下のようにコンポーネントが更新されていることがわかります。

random desc

GitHub 連携との違い

今回の動作確認でわかったことは、Sitecore XM Cloud の管理画面において、Staging から Production に対してコンポーネントの更新を実行することができました。では Production を GitHub の main ブランチと連携させて、staging から pull request を実行して反映させるのと違いはあるのでしょうか?結論から行くと、Build するソースとして反映されていれば、同じ動きになります。

すべての作業を GitHub で完結させるのではなく、Staging の環境から Production に反映させる、というこの手続きを分離したい、というニーズに対して、今回のこの Promote の機能が有効になります。

まとめ

今回の Promote をうまく利用することで、GitHub ですべての作業を完了させる形にならないため、例えば Pull Request に関して間違えたものを OK した、という形で本番環境が崩れるということを避けることができます。運用として Production をよりセキュアに保ちつつ、新しいコンポーネントを随時 Staging でテストする、また他の環境を利用して連携する、という形が可能になることを、今回は確認できました。