top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
Salesforce の Force.com Migration Tool を使うときの、とてのシンプルなサンプルです。defPackage というディレクトリに 必要な package.xml が配置されていることを前提とします。
<project name="Force.com Migration Tool Simple Sample by Igapyon" basedir="." xmlns:sf="antlib:com.salesforce">
<!-- build.properties に必要な設定が実施済みであることを前提とします。 -->
<property file="build.properties"/>
<property environment="env"/>
<!-- 参考にした Migration Tool のシンプルサンプルに元から付属する記述 -->
<condition property="sf.username" value=""> <not> <isset property="sf.username"/> </not> </condition>
<condition property="sf.password" value=""> <not> <isset property="sf.password"/> </not> </condition>
<condition property="sf.sessionId" value=""> <not> <isset property="sf.sessionId"/> </not> </condition>
<taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce">
<classpath>
<!-- このディレクトリ配下の lib フォルダに jar ファイルが配置済みであることを前提とします。 -->
<pathelement location="./lib/ant-salesforce.jar" />
</classpath>
</taskdef>
<!-- 自分の現在作業分をサーバーから取得します。 -->
<!-- このターゲットでは、対象ディレクトリを一旦削除する記述が含まれます。 -->
<!-- このAnt build.xml ファイルは、開発対象ファイルが(内容がほぼ無くても良いから)SFDC上に存在していることを開始前提としています。 -->
<target name="get-myTask">
<echo>自分の現在作業分をサーバーから取得します。</echo>
<mkdir dir="myTask"/>
<echo>1.取得に先立ち、取得先ディレクトリを一旦掃除します。</echo>
<delete verbose="true">
<fileset dir="myTask" includes="**/*.cls,**/*.component,**/*.page,**/*.xml" />
</delete>
<echo>2.実際の取得を実施します。</echo>
<sf:retrieve username="${sf.username}" password="${sf.password}"
sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}"
retrieveTarget="myTask" unpackaged="defPackage/package-myTask.xml"/>
<echo>3.自分の現在作業分について、サーバからの取得が完了しました。</echo>
</target>
<!-- 自分の現在作業分をサーバーへ配備。 -->
<target name="put-myTask">
<echo>自分の現在作業分をサーバーにデプロイします。</echo>
<echo>1.デプロイに先立ち、デプロイ予定物をサーバーからバックアップ取得します。</echo>
<mkdir dir="myTask.bak"/>
<sf:retrieve username="${sf.username}" password="${sf.password}"
sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}"
retrieveTarget="myTask.bak" unpackaged="defPackage/package-myTask.xml"/>
<echo>2.自分の現在作業分のサーバーへのデプロイを実施します。</echo>
<sf:deploy username="${sf.username}" password="${sf.password}"
sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}"
deployRoot="myTask" rollbackOnError="true" testLevel="RunSpecifiedTests">
<!-- 必要に応じて実行テストクラスを書き換え。 -->
<runTest>MyControlFile1</runTest>
</sf:deploy>
<echo>3.自分の現在作業分のサーバーへのデプロイが完了しました。</echo>
</target>
<!-- 自分の担当範囲のソースコード一式をサーバーから取得。 -->
<target name="get-myScope">
<echo>自分の担当範囲分のすべてをサーバーから取得します。</echo>
<mkdir dir="myScope"/>
<echo>1.自分の担当範囲分のすべてをサーバーから取得開始します。</echo>
<sf:retrieve username="${sf.username}" password="${sf.password}"
sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}"
retrieveTarget="myScope" unpackaged="defPackage/package-myScope.xml"/>
<echo>2.自分の担当範囲分のすべてをサーバーから取得完了しました。</echo>
<echo>3.自分の管理下の SCM と取得した内容との差分を把握して、場合によりシンクロおよびコミットしてください。</echo>
</target>
<!-- プロジェクトに関わるすべてのファイルをサーバーから取得。 -->
<target name="get-projectAll">
<echo>プロジェクトに関わるすべてのファイルをサーバーから取得します。</echo>
<mkdir dir="projectAll"/>
<sf:retrieve username="${sf.username}" password="${sf.password}"
sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}"
retrieveTarget="projectAll" unpackaged="defPackage/package-projectAll.xml"/>
</target>
</project>
build.xml ファイルと同じフォルダに、以下のような build.properties ファイルを準備します。
# Specify the login credentials for the desired Salesforce organization
sf.username = <Insert your Salesforce username here>
sf.password = <Insert your Salesforce password here>
# Use 'https://login.salesforce.com' for production or developer edition (the default if not specified).
# Use 'https://test.salesforce.com for sandbox.
sf.serverurl = https://login.salesforce.com
sf.maxPoll = 20