{"id":2892,"date":"2012-06-05T18:51:15","date_gmt":"2012-06-05T13:21:15","guid":{"rendered":"http:\/\/JitendraZaa.com\/blog\/?p=2892"},"modified":"2018-11-09T16:49:55","modified_gmt":"2018-11-09T21:49:55","slug":"salesforce-migration-tool-ant","status":"publish","type":"post","link":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/salesforce-migration-tool-ant\/","title":{"rendered":"Complete Salesforce Deployment Guide using Ant Migration Tool"},"content":{"rendered":"<p style=\"text-align: justify;\">Following are the many tools available for\u00a0Salesforce deployment like<\/p>\n<ol>\n<li>Change sets (From Salesforce site)<\/li>\n<li>Eclipse (Using &#8220;Deploy to force.com server&#8221; option in Eclipse)<\/li>\n<li>ANT (Java based tool)<\/li>\n<\/ol>\n<p>We are going to discuss the ANT based migration, step by step:<\/p>\n<p><strong>Prerequisite:<\/strong><br \/>\nJDK 1.5 or above<\/p>\n<p><strong>Step 1:<\/strong><br \/>\nDownload ANT distribution from &#8211; &#8220;<a title=\"Download ANT\" href=\"http:\/\/ant.apache.org\/bindownload.cgi\" target=\"_blank\" rel=\"nofollow noopener\">http:\/\/ant.apache.org\/bindownload.cgi<\/a>&#8221;<\/p>\n<p style=\"text-align: justify;\"><strong>Step 2:<\/strong><br \/>\nSet Environment variable &#8220;<em>ANT_HOME<\/em>&#8220;. The path should be of parent folder of &#8220;bin&#8221;.\u00a0Also add the &#8220;bin&#8221; folder to your path.<\/p>\n<p style=\"text-align: justify;\"><strong>Step 3:<\/strong><br \/>\nCheck whether ANT is installed or not properly by running command &#8220;<em>ant -version<\/em>&#8220;.\u00a0It might be possible that you receive message something like <strong>unable to find tools.jar<\/strong>. You can copy this jar from &#8220;JDK_HOME\/lib\/tools.jar&#8221; to &#8220;JRE\/lib&#8221; folder.<\/p>\n<p><!--more--><\/p>\n<figure id=\"attachment_3579\" aria-describedby=\"caption-attachment-3579\" style=\"width: 624px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2012\/06\/Salesforce-Get-ANT-version-Original.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3579\" src=\"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2012\/06\/Salesforce-Get-ANT-version-Original.png?resize=624%2C318&#038;ssl=1\" alt=\"Salesforce Get ANT version \" width=\"624\" height=\"318\" \/><\/a><figcaption id=\"caption-attachment-3579\" class=\"wp-caption-text\">Salesforce Get ANT version<\/figcaption><\/figure>\n<p>In above screen you can see that before copying <strong>tools.jar<\/strong> I was getting warning.<\/p>\n<p><strong>Step 4:<\/strong><\/p>\n<p style=\"text-align: justify;\">Login to salesforce and navigate to <strong>&#8220;Your Name |Setup | Develop | Tools&#8221;<\/strong>\u00a0and download <strong>&#8220;Force.com Migration tool&#8221;<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Unzip the downloaded file to the directory of your choice. Copy the <strong>&#8220;ant-salesforce.jar&#8221;<\/strong> file from the unzipped file into the ant lib directory.<\/p>\n<p style=\"text-align: justify;\">To start with deployment using ANT, we will need <strong>&#8220;build.xml&#8221;<\/strong> and<strong> &#8220;build.properties&#8221;<\/strong> file. As there is no need of &#8220;build.properties&#8221; however its good to have it so that the configuration related settings are in different file. You can copy both files from &#8220;sample&#8221; folder of unzipped content from salesforce. Following is the structure of &#8220;build.properties&#8221; file.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n# build.properties\r\n# Specify the login credentials for the desired Salesforce organization\r\nsf.username = &amp;amp;amp;amp;lt;SFDCUserName&amp;amp;amp;amp;gt;\r\nsf.password = &amp;amp;amp;amp;lt;SFDCPasswrd&amp;amp;amp;amp;gt;\r\n#sf.pkgName = &amp;amp;amp;amp;lt;Insert comma separated package names to be retrieved&amp;amp;amp;amp;gt;\r\n#sf.zipFile = &amp;amp;amp;amp;lt;Insert path of the zipfile to be retrieved&amp;amp;amp;amp;gt;\r\n#sf.metadataType = &amp;amp;amp;amp;lt;Insert metadata type name for which listMetadata or bulkRetrieve operations are to be performed&amp;amp;amp;amp;gt;\r\n# Use 'https:\/\/login.salesforce.com' for production or developer edition (the default if not specified).\r\n# Use 'https:\/\/test.salesforce.com for sandbox.\r\nsf.serverurl = https:\/\/test.salesforce.com\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>Step 5:<\/strong><br \/>\nCopy all folders with source code from source organization using eclipse. Lets say the root folder name is &#8220;test1&#8221;.<br \/>\nCreate <strong>&#8220;build.properties&#8221;<\/strong>\u00a0from above code snippet or copy it from unzipped folder. Now create <strong>&#8220;build.xml&#8221;<\/strong> needed by ANT. Following is the example of build.xml file:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;project name=&quot;Shivasoft ANT Tutorial&quot; default=&quot;deployCode&quot; basedir=&quot;.&quot; xmlns:sf=&quot;antlib:com.salesforce&quot;&gt;\r\n    &lt;property file=&quot;build.properties&quot;\/&gt;\r\n    &lt;property environment=&quot;env&quot;\/&gt;\r\n    &lt;!-- Shows deploying code &amp;amp;amp;amp;amp; running tests for code in directory --&gt;\r\n    &lt;target name=&quot;deployCode&quot; depends=&quot;proxy&quot;&gt;\r\n      &lt;sf:deploy username=&quot;${sf.username}&quot; password=&quot;${sf.password}&quot; serverurl=&quot;${sf.serverurl}&quot; deployRoot=&quot;test1&quot;&gt;\r\n        &lt;runTest&gt;TestClassName&lt;\/runTest&gt;\r\n      &lt;\/sf:deploy&gt;\r\n    &lt;\/target&gt;\r\n    &lt;!-- Shows removing code; only succeeds if done after deployCode --&gt;\r\n    &lt;target name=&quot;undeployCode&quot;&gt;\r\n      &lt;sf:deploy username=&quot;${sf.username}&quot; password=&quot;${sf.password}&quot; serverurl=&quot;${sf.serverurl}&quot; deployRoot=&quot;removecodepkg&quot;\/&gt;\r\n    &lt;\/target&gt;\r\n\t&lt;target name=&quot;proxy&quot;&gt;\r\n\t\t&lt;property name=&quot;proxy.host&quot; value=&quot; ProxyURL &quot; \/&gt;\r\n\t\t&lt;property name=&quot;proxy.port&quot; value=&quot;1234&quot; \/&gt;\r\n\t\t&lt;property name=&quot;proxy.user&quot; value=&quot;UserName&quot; \/&gt;\r\n\t\t&lt;property name=&quot;proxy.pwd&quot; value=&quot;Password&quot; \/&gt;\r\n\t\t&lt;setproxy proxyhost=&quot;${proxy.host}&quot; proxyport=&quot;${proxy.port}&quot; proxyuser=&quot;${proxy.user}&quot; proxypassword=&quot;${proxy.pwd}&quot; \/&gt;\r\n\t&lt;\/target&gt;\r\n&lt;\/project&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Attribute &#8220;<strong>deployRoot<\/strong>&#8221; means the root folder from which the code should be copied and tag \u00a0means the testclasses which should run after the deployment. At last, go to the folder &#8220;test1&#8221; from command line and run command &#8220;ant deployCode&#8221;.<\/p>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_3578\" aria-describedby=\"caption-attachment-3578\" style=\"width: 624px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2012\/06\/Salesforce-Migration-using-ANT-Original.png?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-3578\" src=\"https:\/\/i0.wp.com\/jitendrazaa.com\/blog\/wp-content\/uploads\/2012\/06\/Salesforce-Migration-using-ANT-Original.png?resize=624%2C312&#038;ssl=1\" alt=\"Salesforce Migration using-ANT \" width=\"624\" height=\"312\" \/><\/a><figcaption id=\"caption-attachment-3578\" class=\"wp-caption-text\">Salesforce Migration using-ANT<\/figcaption><\/figure>\n<p><span style=\"text-decoration: underline;\"><strong>Checking the status of the task:<\/strong><\/span><br \/>\nTo know the status of task you can run command:<br \/>\nAnt <strong>targetName <\/strong>-Dsf.asyncRequestId=<strong>requestID <\/strong><\/p>\n<p><span style=\"text-decoration: underline;\"><strong>Using Proxy in ANT migration tool:<\/strong><\/span><br \/>\nIf your organization uses the proxy then add below target in &#8220;build.xml&#8221; and specify this target as dependent.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;target name=&quot;proxy&quot;&gt;\r\n\t\t&lt;property name=&quot;proxy.host&quot; value=&quot; ProxyURL &quot; \/&gt;\r\n\t\t&lt;property name=&quot;proxy.port&quot; value=&quot;1234&quot; \/&gt;\r\n\t\t&lt;property name=&quot;proxy.user&quot; value=&quot;UserName&quot; \/&gt;\r\n\t\t&lt;property name=&quot;proxy.pwd&quot; value=&quot;Password&quot; \/&gt;\r\n\t\t&lt;setproxy proxyhost=&quot;${proxy.host}&quot; proxyport=&quot;${proxy.port}&quot; proxyuser=&quot;${proxy.user}&quot; proxypassword=&quot;${proxy.pwd}&quot; \/&gt;\r\n\t&lt;\/target&gt;\r\n<\/pre>\n<p><span style=\"text-decoration: underline;\"><strong>Retrieve content from Salesforce Organization:<\/strong><\/span><br \/>\ncreate &#8220;package.xml&#8221; for the list of component to be retrieved and add following task in &#8220;build.xml&#8221;.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;!-- Retrieve an unpackaged set of metadata from your org --&gt;\r\n&lt;!-- The file unpackaged\/package.xml lists what is to be retrieved --&gt;\r\n&lt;target name=&quot;test&quot; depends=&quot;proxy&quot;&gt;\r\n  &lt;mkdir dir=&quot;retrieveUnpackaged&quot;\/&gt;\r\n  &lt;!-- Retrieve the contents into another directory --&gt;\r\n  &lt;sf:retrieve username=&quot;${sf.username}&quot; password=&quot;${sf.password}&quot; serverurl=&quot;${sf.serverurl}&quot; retrieveTarget=&quot;retrieveUnpackaged&quot; unpackaged=&quot;unpackaged\/package.xml&quot; unzip=&quot;false&quot; \/&gt;\r\n&lt;\/target&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">&#8220;Unzip&#8221; attribute specifies that the code retrieved should be in Zip format or not. By default the value is true means it will not in zip format.<\/p>\n<p style=\"text-align: justify;\"><strong>Delete components from Salesforce Organization using &#8220;destructiveChanges.xml&#8221; :<\/strong><br \/>\nIn some cases, we may want to delete some components like Object or fields from Salesforce Organization. In this case, Only &#8220;package.xml&#8221; will not work. We need to create &#8220;destructiveChanges.xml&#8221; file also. Syntax for this file is exactly same as of &#8220;package.xml&#8221;, except that here we cannot define wildcards. So, to undeploy anything from Salesforce org, we need two xml files &#8211; &#8220;package.xml&#8221; and &#8220;<span style=\"text-decoration: underline;\">destructiveChanges.xml<\/span>&#8220;.<\/p>\n<p style=\"text-align: justify;\">Below is complete code of build.xml, which includes retrieve, Undeploy and Deploy commands.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;project name=&quot;Shivasoft Demo Org&quot; default=&quot;deployCode&quot; basedir=&quot;.&quot; xmlns:sf=&quot;antlib:com.salesforce&quot;&gt;\r\n\t&lt;!-- Get all settings like Server Path, username and passwords from &quot;build.properties&quot; file --&gt;\r\n    &lt;property file=&quot;build.properties&quot;\/&gt;\r\n    &lt;property environment=&quot;env&quot;\/&gt;\r\n\t&lt;!-- Sequence 1 - Get All information from Source, Retrieve the contents into Src directory --&gt;\r\n\t&lt;target name=&quot;SFDCFetch&quot;&gt;\r\n\t  &lt;!-- --&gt;\r\n\t  &lt;sf:retrieve username=&quot;${sf.username}&quot; password=&quot;${sf.password}&quot; serverurl=&quot;${sf.serverurl}&quot; retrieveTarget=&quot;src&quot; unpackaged=&quot;package.xml&quot;\/&gt;\r\n\t&lt;\/target&gt;\r\n\r\n\t&lt;!-- Sequence 3 - Deploy to Target System, Package.xml is present in Src folder --&gt;\r\n\t&lt;target name=&quot;deploy&quot;&gt;\r\n      &lt;sf:deploy username=&quot;${sf1.username}&quot; password=&quot;${sf1.password}&quot; serverurl=&quot;${sf.serverurl}&quot; deployroot=&quot;Src&quot;&gt;\r\n      &lt;\/sf:deploy&gt;\r\n    &lt;\/target&gt; \r\n\r\n\t&lt;!-- Sequence 2 - If you want to remove some components, destructiveChanges.xml and Package.xml present in Delete Folder --&gt;\r\n\t&lt;target name=&quot;unDeploy&quot;&gt;\r\n      &lt;sf:deploy username=&quot;${sf1.username}&quot; password=&quot;${sf1.password}&quot; serverurl=&quot;${sf.serverurl}&quot; deployroot=&quot;Delete&quot;&gt;\r\n      &lt;\/sf:deploy&gt;\r\n    &lt;\/target&gt;\r\n&lt;\/project&gt;\r\n<\/pre>\n<p><a title=\"You may also be interested to check how to automate daily Salesforce organization backup\" href=\"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/automated-daily-backup-using-ant-migration-tool-and-git\/\">You may also be interested to check how to automate daily Salesforce backup<\/a>.<\/p>\n<h3>How to Create Change set from Package.xml<\/h3>\n<p><strong>Step 1 :<\/strong> Create Empty Changeset, lets say its name is changeset2<br \/>\n<strong>Step 2 :<\/strong> add <strong>fullname<\/strong> tag in package.xml. Fullname needs to be the name of changeset created in Step 1<\/p>\n<pre class=\"brush: xml; highlight: [3]; title: ; notranslate\" title=\"\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;Package xmlns=&quot;http:\/\/soap.sforce.com\/2006\/04\/metadata&quot;&gt;\r\n&lt;fullName&gt;Changeset2&lt;\/fullName&gt;\r\n    &lt;types&gt;\r\n        &lt;members&gt;AdditionalQuestionTriggerHandler&lt;\/members&gt;\r\n...\r\n...\r\n&lt;\/package&gt;\r\n<\/pre>\n<p><strong>Step 3 :<\/strong> src folder name which contains package.xml needs to have changeset name, in our case changeset2<\/p>\n<h3>How to Create Package.xml from\u00a0Change set<\/h3>\n<p>Use below ANT script<\/p>\n<pre class=\"brush: xml; highlight: [7]; title: ; notranslate\" title=\"\">\r\n&lt;target name=&quot;retrieveChangeset&quot;&gt;  \r\n  &lt;sf:retrieve \r\nusername=&quot;${sf.username}&quot; \r\npassword=&quot;${sf.password}&quot; \r\nserverurl=&quot;${sf.serverurl}&quot; \r\nretrieveTarget=&quot;changesetfolder&quot; \r\npackageNames=&quot;changesetname&quot; \/&gt; \r\n&lt;\/target&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Update [03-Apr-2017]<\/p>\n<p style=\"text-align: justify;\"><strong><span style=\"text-decoration: underline;\">Question<\/span> : Why Salesforce ANT Migration tool is giving wrong Username, Security token or password error, even when everything is correct ?<\/strong><br \/>\n<strong>Ans :<\/strong> If your password contains &#8220;$&#8221;, then ANT tool ignores this characters. So, to correct this, we need to add one more &#8220;$&#8221;.<\/p>\n<p><strong>Question : I am getting unable to find tools.jar files error. I don&#8217;t have access to server so cannot place tools.jar manually. Can I fix this error using build.xml by placing jar files in relative folder?<\/strong><\/p>\n<p><strong>Ans :<\/strong> You can include any jar file to be in class path. Add below lines in build.xml. All jar files are placed in lib folder.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;path id=&quot;class.path&quot;&gt;\r\n&lt;pathelement location=&quot;${build}&quot;\/&gt;\r\n&lt;fileset dir=&quot;.\/lib&quot;&gt;\r\n&lt;include name=&quot;**\/*.jar&quot; \/&gt;\r\n&lt;\/fileset&gt;\r\n&lt;\/path&gt;\r\n\r\n&lt;taskdef resource=&quot;com\/salesforce\/antlib.xml&quot; uri=&quot;antlib:com.salesforce&quot; classpathref=&quot;class.path&quot;\/&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\"><strong>Question : Why I am getting error like\u00a0java.lang.OutOfMemoryError: Java heap space while retrieving metadata from Salesforce.\u00a0<\/strong><\/p>\n<p style=\"text-align: justify;\">Ans : It is possible that you are retrieving metadata of some big organization with lots of changes. In this case, Java JVM running on system\u00a0needs more memory (RAM) in order to process it. It can be done in two ways<\/p>\n<p>1. Before running ANT command, run below command which will set the RAM allocated for JVM to 1GB. If you are not a Windows user, then use export instead of set in below command.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nset ANT_OPTS=-Xmx1g\r\n<\/pre>\n<p>2. Problem in above solution is that, you would need to execute set command every time before using ANT. For permanent solution, open <strong>ant.bat<\/strong> file in bin folder of ANT installation (Same installation folder referred in ANT_HOME). And, at very first line, write below command and save it.<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nset ANT_OPTS=-Xmx1g\r\n<\/pre>\n<p style=\"text-align: justify;\">I hope this article will help newbie to learn ant migration tool.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Step by Step tutorial of Salesforce Migration using ANT tool with Proxy settings and retrieving content from Salesforce Organization. Also fix some common errors like java.lang.OutOfMemoryError or unable to find tools.jar<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"jz_research_post":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[23,9],"tags":[261,262,452,75,86,329,331,268],"class_list":["post-2892","post","type-post","status-publish","format-standard","hentry","category-configuration","category-salesforce","tag-ant","tag-ant-migration-tool","tag-changeset","tag-deployment","tag-eclipse","tag-java","tag-salesforce","tag-salesforce-migration"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":3902,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/automated-daily-backup-using-ant-migration-tool-and-git\/","url_meta":{"origin":2892,"position":0},"title":"Automated Daily Backup of Salesforce Using ANT Migration Tool and GIT","author":"Jitendra","date":"July 5, 2014","format":false,"excerpt":"In few\u00a0previous articles, I have talked about how to use \"ANT Migration tool in Salesforce\" and \"How to Use EGit plugin in Eclipse to work with Git\". So to make this article short, I assume that you are already familiar with ANT Migration tool provided by Salesforce and Git. During\u2026","rel":"","context":"In &quot;Configuration&quot;","block_context":{"text":"Configuration","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/configuration\/"},"img":{"alt_text":"Salesforce Automated Script for Data Backup Using CommandLine","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/Salesforce-Automated-Script-for-Data-Backup-Using-CommandLine.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/Salesforce-Automated-Script-for-Data-Backup-Using-CommandLine.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2014\/07\/Salesforce-Automated-Script-for-Data-Backup-Using-CommandLine.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":5478,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/delete-components-using-ant-migration-tool-video\/","url_meta":{"origin":2892,"position":1},"title":"Delete Components using Ant Migration tool &#8211; Video","author":"Jitendra","date":"April 27, 2016","format":false,"excerpt":"This video tutorial shows that how we can delete components like Apex class, trigger from Salesforce using ANT migration tool.","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/3kMGy6OeJAc\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":5595,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/dynamically-remove-xml-content-from-metadata-before-salesforce-deployment-using-xmltask-video\/","url_meta":{"origin":2892,"position":2},"title":"Dynamically remove XML content from metadata before Salesforce deployment using xmlTask &#8211; Video","author":"Jitendra","date":"August 18, 2016","format":false,"excerpt":"Example - automatically remove listview before deployment","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Using XMLTask in ANT for Salesforce Deployment","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/08\/2016-07-15.png?fit=922%2C519&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/08\/2016-07-15.png?fit=922%2C519&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/08\/2016-07-15.png?fit=922%2C519&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2016\/08\/2016-07-15.png?fit=922%2C519&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":4276,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/continuous-integration-in-salesforce-using-jenkins-and-git-video-tutorial\/","url_meta":{"origin":2892,"position":3},"title":"Continuous integration in Salesforce Using Jenkins and Git | Video Tutorial","author":"Jitendra","date":"March 23, 2015","format":false,"excerpt":"As your Salesforce Organization undergoes heavy customization and frequent builds, moving changes from one Sandbox to other sandboxes starts taking longer time and effort. Also, in normal Salesforce project, there are chances that you will have minimum three sandboxes likely Developer Sandbox, QA Sandbox and UAT Sandbox. After some time\u2026","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Salesforce - Jenkins Git Polling Log","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Salesforce-Jenkins-Git-Polling-Log.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Salesforce-Jenkins-Git-Polling-Log.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Salesforce-Jenkins-Git-Polling-Log.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2015\/03\/Salesforce-Jenkins-Git-Polling-Log.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":5935,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/continuous-integration-ci-in-salesforce-using-team-foundation-server-tfs-video\/","url_meta":{"origin":2892,"position":4},"title":"Continuous Integration (CI) in Salesforce using Team Foundation Server (TFS) &#8211; Video","author":"Jitendra","date":"March 20, 2017","format":false,"excerpt":"Step by step guide to set up Continuous Integration (CI) for Salesforce using Team Foundation Server (TFS) with video tutorial","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Team Foundation Server (TFS) - New Build definition - Select repository","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/03\/Team-Foundation-Server-TFS-New-Build-definition-Select-repository.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/03\/Team-Foundation-Server-TFS-New-Build-definition-Select-repository.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/03\/Team-Foundation-Server-TFS-New-Build-definition-Select-repository.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/03\/Team-Foundation-Server-TFS-New-Build-definition-Select-repository.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":6209,"url":"https:\/\/www.jitendrazaa.com\/blog\/salesforce\/how-to-retrieve-and-deploy-custom-metadata-types-using-ant\/","url_meta":{"origin":2892,"position":5},"title":"How to Retrieve and Deploy Custom Metadata Types using ANT","author":"Jitendra","date":"August 27, 2017","format":false,"excerpt":"Using Salesforce ANT Migration toolkit to retrieve and deploy custom metadata types with record. Sample Package.xml and ANT script included.","rel":"","context":"In &quot;Salesforce&quot;","block_context":{"text":"Salesforce","link":"https:\/\/www.jitendrazaa.com\/blog\/category\/salesforce\/"},"img":{"alt_text":"Sample of Package.xml to deploy Custom Metadata Types","src":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/08\/Sample-of-Package.xml-to-deploy-Custom-Metadata-Types.png?fit=1051%2C330&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/08\/Sample-of-Package.xml-to-deploy-Custom-Metadata-Types.png?fit=1051%2C330&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/08\/Sample-of-Package.xml-to-deploy-Custom-Metadata-Types.png?fit=1051%2C330&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/08\/Sample-of-Package.xml-to-deploy-Custom-Metadata-Types.png?fit=1051%2C330&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.jitendrazaa.com\/blog\/wp-content\/uploads\/2017\/08\/Sample-of-Package.xml-to-deploy-Custom-Metadata-Types.png?fit=1051%2C330&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/2892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/comments?post=2892"}],"version-history":[{"count":8,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/2892\/revisions"}],"predecessor-version":[{"id":6646,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/posts\/2892\/revisions\/6646"}],"wp:attachment":[{"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/media?parent=2892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/categories?post=2892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jitendrazaa.com\/blog\/wp-json\/wp\/v2\/tags?post=2892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}