LoginSignup
1
2

Salesforce CLIを使用したデプロイツールをBATファイルで作ってみた

Posted at

Salseforce CLI (sf Commands) Deploy tool

  • Ant 移行ツールが Spring '24 で廃止になったためSalesforce CLIを使用したデプロイツールをBATファイルで作成しました。
  • CLIが苦手・コマンドを打つのが面倒 そんな方に是非!

ソースコード(GitHub)

必要条件

実行環境

  • Windows

下記を必ずインストールしておいてください。

  • Salesforce CLI ※sf (v2)
    • インストールやsfdx (v7) から sf (v2) への移行方法はSalesforceのHelpを確認ください。

必須ではないため任意でインストールをお願いします。

セットアップ

1. 接続情報の入力

  • ..\toolkit\config\setting.iniを開きます。
    • 接続情報を入力します。
パラメータ このステップでの入力対象箇所
SfMyDomain 組織の私のドメインを設定します。

※「私のドメイン」確認方法
Salesforce組織へログイン > 設定>クイック検索で「私のドメイン」入力・「私のドメイン」をクリック > [私のドメイン] の詳細セクション内の「現在の [私のドメイン] の URL」右横に記載のURL。
(コピー時には「https://」が付いていないので忘れずに!)
SfUserName デプロイに使用するユーザーのSalesforce ユーザー名
SfdxAuthUrl Salesforce組織への認証情報を含む URLを記載のテキストファイルに設定します。
後ほどの手順で取得方法を案内します。
SoapApiVersion HTTPS の要求や応答の処理に使用されるメタデータ API のコアバージョンを指します。
※初期設定として55.0に設定しています。必要に応じて変更してください。
TestLevel 指定したテストレベルによってテストの範囲が変化します。
RunSpecifiedTests と RunAllTestsInOrgの指定が可能です。
・RunSpecifiedTests: 指定したテストのみを実行します。
・RunAllTestsInOrg:管理パッケージのテストを含む、組織内のすべてのテストが実行されます。

初期状態では、Org01のセクションを使用可能状態にしています。
Org02、Org03も用意していますので必要に応じてコメントアウト「;」を切り替えて使用ください。

2. 組織を認証 (Authorize an Org) およびSfdx Auth Urlの取得

  • ..\toolkit\Init_loginWeb_sfdxAuthUrl_cfm.batを実行します。
    • コマンドプロンプトが開いた直ぐにブラウザ(Chrome)が起動するのでデプロイに使用するユーザー情報を入力して組織の認証を行います。
      下記画像のような画面が表示されたら接続完了です。
      authenticationSuccessful.png

    • コマンドプロンプトに戻って=== Org Descriptionが表示されているためSfdx Auth Url(画像の赤枠)部分をコピーしてください。
      後ほど使用するのでどこかにメモしておいてください。
      getsfdxAuthUrl.png

    • コマンドプロンプトに表示される案内に沿って操作し処理を完了します。

Sfdx Auth Urlは認証情報を含む URLのため取り扱いには注意を!!

3. Sfdx Auth Urlの設定

※ここからは、1. 接続情報の入力でOrg01を使用している前提で記載しています。

使用方法および機能

事故防止のためBat実行毎に組織への接続(ログイン)・切断(ログアウト)を行っています。

メタデータ取得

  • 取得したいメタデータを..\toolkit\retrievemanifest\package.xmlに記載します。
    • 必要に応じて内容を編集してください。
  • 01.retrieve_before.batを実行します。
    • 処理内容
      • 組織への接続(ログイン)
      • 組織のメタデータの取得
      • 組織から切断(ログアウト)
    • 処理結果
      • Batファイルを実行した日時のフォルダ名(YYYY-MM-DD_HH-MM-SS_"number"形式)で..\toolkit\01.retrieved_beforeに格納します。
  • 02.retrieve_after.batを実行します。
    • 処理内容
      • 組織への接続(ログイン)
      • 組織のメタデータの取得
      • 組織から切断(ログアウト)
    • 処理結果
      • Batファイルを実行した日時のフォルダ名(YYYY-MM-DD_HH-MM-SS_"number"形式)で..\toolkit\02.retrieved_afterに格納します。

フォルダ名の"number"部分は固定のテキストですので、各プロジェクトのルールに沿って課題番号などに書き換えるなどして使用してください。

現在の認証済の組織一覧表示

  • authorization_info_list.batを実行します。
    • コマンドプロンプトの=== authenticated orgs下に現在認証済の組織一覧が表示されます。
      authorizationinfolist.png

メタデータのデプロイ

  • ..\toolkit\deploycodepkgにデプロイ対象の資材を格納してください。

初期状態では、サンプル資材を格納しています。
使用する際にはdeploycodepkg内の資材は削除してください。

サンプル:Apexクラス2個 トリガ1個の場合

  ─deploycodepkg
    │  package.xml
    │
    ├─classes
    │      SampleDeployClass.cls
    │      SampleDeployClass.cls-meta.xml
    │      SampleFailingTestClass.cls
    │      SampleFailingTestClass.cls-meta.xml
    │
    └─triggers
            SampleAccountTrigger.trigger
            SampleAccountTrigger.trigger-meta.xml
  • ..\toolkit\testclasslist.txtにデプロイ時に実行するApexクラス名を半角スペース区切りで記載してください。
    サンプル:Apexテストクラス3個実行する場合
    SampleFailingTestClass01 SampleFailingTestClass02 SampleFailingTestClass03
    
  • deploy_start.batを実行します。
    • 処理内容
      • 組織への接続(ログイン)
      • デプロイ前のメタデータ取得
      • デプロイ と Apexテストの実行
      • デプロイ後のメタデータ取得
      • 組織から切断(ログアウト)
    • 処理結果
      • デプロイ前のメタデータ取得処理が実行された日時のフォルダ名(YYYY-MM-DD_HH-MM-SS_"number"形式)で..\toolkit\01.retrieved_beforeに格納します。
      • デプロイ後のメタデータ取得処理が実行された実行した日時のフォルダ名(YYYY-MM-DD_HH-MM-SS_"number"形式)で..\toolkit\02.retrieved_afterに格納します。
      • 処理の記録をBatファイルを実行した日時のフォルダ名("deploy"_MMDDHHMMSS.log形式)でlogファイルを..\toolkit\log\deployに格納します。

Sfdx Auth Urlの取得(セットアップ)

組織への接続(ログイン)

  • login_org_sfdx_url.batを実行します。
    ※Sfdx Auth Urlが設定(セットアップが完了)されている前提です。
    • 処理内容
      • 組織への接続(ログイン)

組織から切断(ログアウト)

  • logout_org.batを実行します。
    • 処理内容
      • 組織から切断(ログアウト)

メタデータの前後比較

WinMergeがインストールされている場合に実行可能です。

  • openWinMerge.batを実行します。
    • 処理内容
      • ..\toolkit\01.retrieved_before内の最新のフォルダを取得。
      • ..\toolkit\02.retrieved_after内の最新のフォルダを取得。
      • WinMergeを起動して上記で取得したフォルダ同士を比較します。
        openWinMerge.png

ディレクトリ構成

─toolkit
    │  01.retrieve_before.bat
    │  02.retrieve_after.bat
    │  authorization_info_list.bat
    │  deploy_start.bat
    │  Init_loginWeb_sfdxAuthUrl_cfm.bat
    │  login_org_sfdx_url.bat
    │  logout_org.bat
    │  openWinMerge.bat
    │  testclasslist.txt
    │
    ├─01.retrieved_before
    │      forpush.txt  ←空ファイル(Githubフォルダ作成のため)
    │
    ├─02.retrieved_after
    │      forpush.txt  ←空ファイル(Githubフォルダ作成のため)
    │
    ├─config
    │      setting.ini
    │      sfdxAuthUrl_org01.txt
    │      sfdxAuthUrl_org02.txt
    │      sfdxAuthUrl_org03.txt
    │
    ├─deploycodepkg
    │  │  package.xml ←サンプルコード
    │  │
    │  ├─classes ←サンプルコード
    │  │      SampleDeployClass.cls
    │  │      SampleDeployClass.cls-meta.xml
    │  │      SampleFailingTestClass.cls
    │  │      SampleFailingTestClass.cls-meta.xml
    │  │
    │  └─triggers ←サンプルコード
    │          SampleAccountTrigger.trigger
    │          SampleAccountTrigger.trigger-meta.xml
    │
    ├─log
    │  └─deploy
    │          forpush.txt  ←空ファイル(Githubフォルダ作成のため)
    │
    └─retrievemanifest
            package.xml
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2