※ これから記載する事項は、私が所属する会社とは一切関係のない事柄です。
この記事では B2C Commerce の CI/CD で利用されるコマンドツール sfcc-ci についてインストール方法やツールの利用方法を紹介します。
sfcc-ciとは?
Githubに公開されているSalesforceのB2C Commerceの環境に対してCI/CDを実現するためのオープンソースツールです。
このツールを利用する方法は2パターンあります。今回の記事ではコマンドラインのみ取り扱います。Javascript APIの利用方法はGithubをご覧ください。また、 Javascript API を利用した CI/CD のツール もあります。
1. コマンドライン
# 例
sfcc-ci code:deploy
2. Javascript API
// 例
const sfcc = require('sfcc-ci');
sfcc.auth.auth(client_id, client_secret, callback);
前提
- Mac OSを利用して説明します
sfcc-ciの利用方法
1. インストール
- 自身の環境に合わせた最新のバイナリリソースをGithubからダウンロードします。今回はMac OSを利用するので、
sfcc-ci-macos
をダウンロードします。 - ダウンロードしたバイナリファイルを自身のローカルマシンの任意の場所におきます。
- 下記コマンドで権限を変更します。
chmod +x ./sfcc-ci-macos
- さらに下記コマンドでパスの通ったディレクトリにファイルを移動します。
sudo mv ./sfcc-ci-macos /usr/local/bin/sfcc-ci
- 下記コマンドでヘルプが表示されれば完了です。
sfcc-ci --help
2. Account Managerでの設定
-
Add API Clientの手順に沿ってクライアントを作成してください。その際、Redirect URIs には 、
http://localhost:8080/
。Default Scopes には、roles
tenantFilter
profile
を改行して入れてください。 - この際設定したID/パスワードは後にも利用しますのでメモしておいてください。
3. Business Managerでの設定
OCAPIの設定
- Business Manager で 管理 > サイトの開発 > Open Commerce API 設定 に遷移
- 「タイプの選択:」セレクトボックスでは
データ
を選択 - 「範囲の選択:」セレクトボックスでは、
グローバル(組織全体)
を選択 - 下記のJSONを
my_client_id
部分を上記のAccount Managerで作ったクライアントのIDにリプレースし追加。すでに追加されている場合は、clients のリストの内容を追加。
{
"_v": "19.5",
"clients":
[
{
"client_id": "my_client_id",
"resources":
[
{
"resource_id": "/code_versions",
"methods": ["get"],
"read_attributes": "(**)",
"write_attributes": "(**)"
},
{
"resource_id": "/code_versions/*",
"methods": ["patch", "delete"],
"read_attributes": "(**)",
"write_attributes": "(**)"
},
{
"resource_id": "/jobs/*/executions",
"methods": ["post"],
"read_attributes": "(**)",
"write_attributes": "(**)"
},
{
"resource_id": "/jobs/*/executions/*",
"methods": ["get"],
"read_attributes": "(**)",
"write_attributes": "(**)"
},
{
"resource_id": "/sites/*/cartridges",
"methods": ["post"],
"read_attributes": "(**)",
"write_attributes": "(**)"
},
{
"resource_id":"/role_search",
"methods":["post"],
"read_attributes":"(**)",
"write_attributes":"(**)"
},
{
"resource_id":"/roles/*",
"methods":["get"],
"read_attributes":"(**)",
"write_attributes":"(**)"
},
{
"resource_id":"/roles/*/user_search",
"methods":["post"],
"read_attributes":"(**)",
"write_attributes":"(**)"
},
{
"resource_id":"/roles/*/users/*",
"methods":["put","delete"],
"read_attributes":"(**)",
"write_attributes":"(**)"
},
{
"resource_id":"/user_search",
"methods":["post"],
"read_attributes":"(**)",
"write_attributes":"(**)"
},
{
"resource_id":"/users",
"methods":["get"],
"read_attributes":"(**)",
"write_attributes":"(**)"
},
{
"resource_id":"/users/*",
"methods":["put","get","patch","delete"],
"read_attributes":"(**)",
"write_attributes":"(**)"
}
]
}
]
}
Web DAVの設定
- Business Manager で 管理 > 組織 > クライアントの WebDAV 許可 に遷移
- 下記のJSONを
my_client_id
部分を上記のAccount Managerで作ったクライアントのIDに、<your-
で始まる部分を自身の環境に合わせてリプレースし追加。すでに追加されている場合は、clients のリストの内容を追加。
{
"clients":
[
{
"client_id": "my_client_id",
"permissions":
[
{
"path": "/impex",
"operations": [
"read_write"
]
},
{
"path": "/cartridges",
"operations": [
"read_write"
]
},
{
"path": "/static",
"operations": [
"read_write"
]
},
{
"path": "/catalogs/<your-catalog-id>",
"operations": [
"read_write"
]
},
{
"path": "/libraries/<your-library-id>",
"operations": [
"read_write"
]
},
{
"path": "/dynamic/<your-site-id>",
"operations": [
"read_write"
]
}
]
}
]
}
4. 認証
Account Managerから作成したAPIクライアントのID(client_id)とパスワード(client_secret)を利用して認証することが可能です。
ブラウザログインを利用して認証する方法
下記のコマンドを実行すると、ブラウザが開くので、アカウントManagerにログインして認証する。
sfcc-ci auth:login <client_id>
コマンドのみで認証する方法
下記のコマンドを実行するとブラウザの立ち上がりなく認証を行う。
sfcc-ci client:auth <client_id> <client_secret>
引数ではなく変数で定義する場合
export SFCC_OAUTH_CLIENT_ID=<client_id>
export SFCC_OAUTH_CLIENT_SECRET=<client_secret>
sfcc-ci client:auth
CI/CDでよく利用されそうなコマンド
sfcc-ci --help
で全てのコマンドを確認できますが、CI/CDよく利用されそうなコマンドを下に記載しておきます。
それぞれのコマンドにさらに sfcc-ci code:deploy --help
のように --help
をつけれはコマンドの利用方法を確認することができます。
ソースコードのデプロイ
sfcc-ci code:deploy [options] <archive>
バージョンのアクティブ化
sfcc-ci code:activate [options] <version>
サイト情報のアップロード
sfcc-ci instance:upload [options] <archive>
サイト情報のインポート
sfcc-ci instance:import [options] <archive>
カートリッジパスの追加
sfcc-ci cartridge:add [options] <cartridgename>
ジョブの実行
sfcc-ci job:run [options] <job_id> [job_parameters...]
ジョブのステータスの確認
sfcc-ci job:status [options] <job_id> <job_execution_id>
サイトデータとカートリッジをデプロイするシェルを作ってみる
作成するシェルの仕様
deploy.sh
というシェルを作成し、SFRAのGithub(要Account Managerアカウント)から取得したソースコードのルートディレクトリに配置する。
- カートリッジは
/cartridges
配下に設置する - サイトデータは
/sample_sitedata
に配置する - 取り込むサイトデータとして
TestDeploy
というカスタムオブジェクトを作成する - カートリッジのバージョンは
version_{タイムスタンプ}
とする - デプロイと同時にバージョンを有効化する
- 実行中、一時的に
/build
ディレクトリを作成する - JS、CSSファイルのビルドは今回は扱わない
作成したシェル
利用の際はコード内の下記の変数に値を入れてください。
- SFCC_OAUTH_CLIENT_ID
- 2.Account Managerでの設定 で設定したID
- SFCC_OAUTH_CLIENT_SECRET
- 2.Account Managerでの設定 で設定したパスワード
- HOST
- デプロイ先のホスト名
#!/bin/sh
set -eu
# set -x
# シェルのあるディレクトリパスの取得
THIS_FILE_DIR=$(cd $(dirname $0); pwd)
# カートリッジとサイトデータのディレクトリ名の定義
CARTRIDGE_DIR_NAME="cartridges"
SITEDATA_DIR_NAME="sample_sitedata"
# カートリッジとサイトデータのディレクトリパスとバージョンの定義
CARTRIDGE_DIR=$THIS_FILE_DIR"/"$CARTRIDGE_DIR_NAME
SITEDATA_DIR=$THIS_FILE_DIR"/"$SITEDATA_DIR_NAME
VERSION="version_"`date +'%Y%m%d%H%M%S'`
# 一時ディレクトリの定義と作成
TMP_DIR=$THIS_FILE_DIR"/build"
mkdir -p $TMP_DIR
# 一時ディレクトリにソースを移動
cp -rf $CARTRIDGE_DIR $TMP_DIR
cp -rf $SITEDATA_DIR $TMP_DIR
# 一時ディレクトリでzip圧縮
cd $TMP_DIR
mv $CARTRIDGE_DIR_NAME $VERSION
zip -r $VERSION".zip" $VERSION
zip -r $SITEDATA_DIR_NAME".zip" $SITEDATA_DIR_NAME
# シェルのあるディレクトリパスに戻る
cd $THIS_FILE_DIR
# sfcc-ciの認証のための環境変数(今回は一旦ソース上にベタ書き)
export SFCC_OAUTH_CLIENT_ID=""
export SFCC_OAUTH_CLIENT_SECRET=""
HOST="XXXXXX.sandbox.us00.dx.commercecloud.salesforce.com"
# sfcc-ciのデバッグを利用
export DEBUG=true
# sfcc-ciの認証
sfcc-ci client:auth
# サイトデータのデプロイとソースコードのアクティブ化
sfcc-ci instance:upload $TMP_DIR"/"$SITEDATA_DIR_NAME".zip" -i $HOST
sfcc-ci instance:import $SITEDATA_DIR_NAME".zip" -fjs -i $HOST
# カートリッジのデプロイとソースコードのアクティブ化
sfcc-ci code:deploy $TMP_DIR"/"$VERSION".zip" -i $HOST
sfcc-ci code:activate $VERSION -i $HOST
# 一時ディレクトリの削除
rm -rf $TMP_DIR