咱們在作項目時常常會使用changeset做爲部署工具,可是某些場景使用changeset會比較難操做,好比當咱們在sandbox將apex class更更名字想要部署到生產的org或者其餘環境的org,使用changeset是無法實現的,這個時候咱們須要使用Ant Migration Tool仍是更好的。html
salesforce基於metadata進行管理,Ant Migration Tool 是一個基於 Java/Ant的命令行工具用於將metadata從本地遷移至Sales Org. Migration Tool一般用於如下場景:java
Migration Tool基於Metadata API, Metadata API 包含了一組對象,這些對象用於管理你的org的系統預置的以及自定義的metadata, 咱們可使用SOAP calls來操做這些對象。下面介紹 Migration Tool 如何使用。express
Migration Tool 使用前的準備工做apache
在咱們使用Migration Tool時,咱們須要保證電腦中已經安裝了java的運行環境以及ant。因爲salesforce對TLS1.0已經棄用,因此建議java JDK使用1.8(曾經java項目使用1.7,儘管按照要求各類配置了 tls信息仍然會有各類位置錯誤,使用1.8之後便一點問題沒有了,因此推薦使用1.8)。api
1. JDK 1.8 下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 按照要求下載之後正常安裝便可,安裝完若是想確認電腦中是否已經就緒JDK 1.8環境,能夠打開命令行,輸入 java -version 回車便可(須要配置java的jdk的環境變量,網上找一大堆,若是不配置,ant運行會有問題,由於找不到jdk位置);session
2. 下載和配置 Ant: Ant下載地址: http://ant.apache.org/bindownload.cgi , 官方建議下載1.6 及以上版本,目前版本最高爲1.10.5, 我這裏下載的是這個版本,解壓後我放在了C:\ant\apache-ant-1.10.5文件夾下面了。當咱們解壓之後運行 ant -version後,會發現ant指令是未識別的命令oracle
緣由是bin目錄以及lib目錄用於運行ant指令,咱們沒有將bin目錄放在path中。咱們右鍵計算機,選擇屬性,選擇高級,下面系統變量欄new一個,name爲ANT_HOME,value爲你解壓的ant的根目錄;ide
找到你的path的信息,新增%ANT_HOME%\bin便可,若是你的環境是win7,在最後須要加;而後輸入下面信息工具
從新運行 ant -version,若是提示你安裝的ant 安裝的版本,說明安裝成功。學習
3. 下載 Migration Tool,能夠在你的org的setup 搜索出搜索 Tools,而後選擇 Lightning Platform Tools and Toolkits.在跳轉的頁面選擇下載Ant Migration Tools便可
二. Ant Migration Tool的使用
能夠經過如下的步驟去實現 Ant Migration Tool的使用。
1. 配置 Salesforce Connection 信息
咱們目的是爲了檢索和部署metadata組件,因此咱們須要源及目標的登錄salesforce的帳號以及密碼等信息,這些信息配置在build.properties,這個文件存在於解壓的 Ant Migration Tool 文件中。
配置信息主要有如下內容:
2.構建項目檢索/部署清單
在package.xml中,咱們主要須要配置如下的節點的信息:
上面的具體怎麼使用,後面會給一個例子進行簡單說明。
3. 使用Migration Tool 的指令從salesforce org檢索/ 部署 / 移除 metadata組件
Ant的jar包裏面封裝了好多的soap的標準方法,常見的有 retrieve / deploy等等。經過ant指令在cmd中進行操做便可實現經過ant 部署salesforce的metadata組件。
三. Ant Migration Tool實際操做
下面經過一個例子來進行演示,例子淺入淺出,描述的是將我一個org裏面的custom label所有遷移至另一個org裏面,而後再將指定的custom label從個人新的org刪除(檢索、部署以及刪除操做的簡單描述)。想要了解更多使用的小夥伴歡迎查看Ant Migration Tool的官方文檔:https://resources.docs.salesforce.com/218/latest/en-us/sfdc/pdf/salesforce_migration_guide.pdf
上圖中的內容爲例子中的層級結構: My First Test中包含了兩個文件夾:remove(用於指定移除的 destructureChanges.xml的metadata結構)、retrieve(用於指定須要檢索部署的metadata結構)。
build.properties配置了登錄salesforce org A的帳號信息,build.xml中用來配置你的操做指令。這裏主要有三個部分:
1 <project name="Sample usage of Salesforce Ant tasks" default="test" basedir="." xmlns:sf="antlib:com.salesforce"> 2 3 <property file="build.properties"/> 4 <property environment="env"/> 5 6 <!-- Setting default value for username, password and session id properties to empty string 7 so unset values are treated as empty. Without this, ant expressions such as ${sf.username} 8 will be treated literally. 9 --> 10 <condition property="sf.username" value=""> <not> <isset property="sf.username"/> </not> </condition> 11 <condition property="sf.password" value=""> <not> <isset property="sf.password"/> </not> </condition> 12 <condition property="sf.sessionId" value=""> <not> <isset property="sf.sessionId"/> </not> </condition> 13 14 <taskdef resource="com/salesforce/antlib.xml" uri="antlib:com.salesforce"> 15 <classpath> 16 <pathelement location="../ant-salesforce.jar" /> 17 </classpath> 18 </taskdef> 19 20 21 <target name="retrieveOperation"> 22 <mkdir dir="retrieveFolder"/> 23 <sf:retrieve username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" retrieveTarget="retrieveFolder" pollWaitMillis="10000" unpackaged="retrieve/package.xml"/> 24 </target> 25 26 <target name="deployOperation"> 27 <sf:deploy username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="retrieveFolder" rollbackOnError="true"/> 28 </target> 29 30 <target name="removeOperation"> 31 <sf:deploy username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="remove"/> 32 </target> 33 34 </project>
salesforce org A:存在custom label
salesforce org B:不存在custom label
咱們將retrieve文件夾下的package.xml中配置如下的內容,目的是讀取全部的custom label
切換到 My First Test 文件夾下,執行 ant -p build.xml能夠搜索出來當前目錄下全部能夠執行的ant的指令,由於咱們在build.xml中只配置了3個,因此當前目錄下ant的指令總共有3個。
執行 ant retrieveOperation即可以將全部的retrieve目錄下的metadata xml信息檢索出來
retrieveFolder中生成相關的文件信息以及package.xml文件
更改build.properties文件,切換成salesforce org B的帳號,執行 ant deployOperation操做即可以將retrieveFolder中的metadata文件部署到salesforce org B中。
Salesforce Org B已經存在剛部署的metadata component了。
在remove文件夾中的destructiveChanges.xml中配置須要移除的metadata組件
執行 ant deleteOperation之後,即可以刪除salesforce org B中的配置的metadata組件了。
salesforce org B已經移除指定的metadata組件
總結:篇中只是簡單的描述Ant Migration Tool的使用,深刻的細節的學習仍是要自行查看官方提供的文檔以及download下來的ant jar中的sample,篇中有問題的歡迎指出,有不懂的歡迎留言。