#今回のテーマ
前回までの記事でSalesforceの開発組織から自動でメタデータを取得して、バックアップを取るツールを紹介しました。そのツールの作成にあたって、非常に苦労したbatファイルに関して、書いていこうと思います。
###前回までの記事
- Salesforce組織のメタデータを自動バックアップするツール作ってみた
- SF組織でObjのCRUD権限を時間帯で制限する(Salesforce組織のメタデータを自動バックアップするツール作ってみたその2)
- Salesforce組織のメタデータを自動バックアップするツール作ってみたその3
#batファイルで実行したかったこと
まず、上記のツールを作成する上でやりたかったことは以下の通り。
・SF組織からメタデータを取得する
・差分をGitCommitする(差分がなければ空コミットする)
とても単純でcmdから実行するには以下のコマンドを順番通り実行すれば、想定通り動作する
cd targetdirectory
sfdx force:source:retrieve -u username@mail.com
git add --all
git commit --allow-empty -m"message"
とても単純なので、上記を実行するバッチファイルを作成
sfdx force:source:retrieve -u username@mail.com
git add --all
git commit --allow-empty -m"message"
そしてのこのファイルを実行すると....
なぜか失敗する。SF組織からメタデータを取得するところまでは、そのあとの処理で落ちる。
#原因
上記のバッチファイルのように、1つずつのコマンドを実行させると、sfdxの実行後にcmdが実行完了で、
終了してしまっていた。全てのコマンドを1タスクとして実行させるように以下のように記述することで、
sfdxコマンド後にcmdが終了することを回避できた。
sfdx force:source:retrieve -u username@mail.com & git add --all & git commit --allow-empty -m"message"
#他に起きたこと・試したこと
windows.batではGitコマンドは使えないのかと思って色々調べたら、batファイルと同様のshファイルをGit bashに渡してあげれば
上手くいくという記事を見つけたので下記のようなことを試しました。
sfdx force:source:retrieve -u username@mail.com
git-bash C/Users/user Name/Desktop/sforg/commit.sh
git add --all
git commit --allow-empty -m"message"
cd targetdirectory
git add --all
git commit --allow-empty -m"message"
ここでの問題点
上記のファイルではgit-bashコマンドに引数で渡しているファイルが実行されません。git-bashに引数として渡す実行ファイルを指定する際は
git-bash "C/Users/user Name/Desktop/sforg/commit.sh"
のようにダブルクオートでくくって上げる必要があります。
windows.bat実行後に、結果が出力されると次のコマンドが実行されないのではないこと思い「@echo off」を付けましたが、
やはり最初のコマンド実行後cmdが終了してしまいました。
上記のように「&」で各コマンドを繋げるしかないようです。
#結論
コマンドを「&」で繋げないと、最初のコマンドで終了してしまうことがあるという記事が、
なかなか見当たらず、今回はかなり苦労しました。どなたかの役に立てば幸いです。