dackdive's blog

新米webエンジニアによる技術ブログ。JavaScript(React), Salesforce, Python など

[Salesforce]Force.com Migration Toolで複数の組織を簡単に管理する

Force.com Migration Tool を使っている時、開発用の組織が複数あると
build.properties を複数用意してデプロイ先を簡単に切り替えたい
というニーズが個人的にあります。

具体的には、

  1. デプロイ時、デプロイ先の組織 を引数で変更可能にしたい
    • build.properties を毎回書き換えるのは嫌なので複数用意しておきたい
  2. デプロイ時、デプロイ対象のディレクト も引数で変更可能にしたい
    • git とかでソースを管理する際、作ったものの内容ごとにディレクトリを分けたりしたいので

これを簡単にできるように build.xml を修正&簡単なシェルスクリプトを作ってみました。

GitHub

シェルスクリプトも含めて、Force.com Migration Tool を簡単に使い始めるためのファイル群を GitHub で公開してます。

build.xml

こんな感じで、プロパティファイル名とデプロイ対象ディレクトリ名を ant の property として用意しておきます。

<project name="Salesforce Ant tasks" default="deployCode" basedir="." xmlns:sf="antlib:com.salesforce">

    <!-- デフォルトで使用する
        - .properties ファイル
        - deploy 対象ディレクトリ -->
    <property name="property" value="build.properties"/>
    <property name="deployTarget" value="codepkg"/>

    <property file="${property}"/>
    <property environment="env"/>

    <!-- コードを組織にデプロイ -->
    <target name="deployCode">
        <sf:deploy
            username="${sf.username}"
            password="${sf.password}"
            serverurl="${sf.serverurl}"
            maxPoll="${sf.maxPoll}"
            deployRoot="${deployTarget}">
        </sf:deploy>
    </target>

deploy.sh

#!/bin/bash

while getopts p:t: OPT
do
  case $OPT in
    p)  PROPERTY=$OPTARG
      ;;
    t)  TARGET=$OPTARG
      ;;
  esac
done

if [ -n "$PROPERTY" ]; then
  OPT_PROPERTY="-Dproperty=$PROPERTY"
fi

if [ -n "$TARGET" ]; then
  OPT_TARGET="-DdeployTarget=$TARGET"
fi

ant deployCode $OPT_PROPERTY $OPT_TARGET

使い方

こんな感じで、プロパティファイルを指定する時は -p オプションを、デプロイ対象のディレクトリを指定する時は -t オプションをつけて deploy.sh を実行します。

$ ls
build.properties
my_org1.properties
my_org2.properties
pkg1
pkg2
# my_org1 で定義した組織に pkg1 の内容をデプロイ
$ ./deploy.sh -p my_org1.properties -t pkg1

それぞれのオプションは省略が可能で、省略した場合は build.xml で定義したデフォルト値が使用されます。