<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TFS &#8211; Best DevOps</title>
	<atom:link href="https://www.bestdevops.com/tag/tfs/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bestdevops.com</link>
	<description>Lets Learn, Do it &#38; Share! Thats a Best DevOps!!!</description>
	<lastBuildDate>Tue, 13 Oct 2026 04:34:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Technical Indicators Explained: Ichimoku Spans, RSI, CCI, ADX, and Williams %R</title>
		<link>https://www.bestdevops.com/indicator-focus-on-shares-of-tfs-financial-corp-tfsl/</link>
					<comments>https://www.bestdevops.com/indicator-focus-on-shares-of-tfs-financial-corp-tfsl/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Tue, 25 Jun 2019 06:00:25 +0000</pubDate>
				<category><![CDATA[IT Training]]></category>
		<category><![CDATA[financial]]></category>
		<category><![CDATA[globalization]]></category>
		<category><![CDATA[Market]]></category>
		<category><![CDATA[Shares]]></category>
		<category><![CDATA[TFS]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=5617</guid>

					<description><![CDATA[A practical guide to the key technical indicators used by active traders, including Ichimoku Cloud Span A/B signals, Commodity Channel Index, Relative Strength Index, Average Directional Index, and Williams %R.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Technical analysis gives traders a framework for evaluating price momentum, trend strength, and potential reversal points without relying solely on a company&#8217;s fundamentals. This article explains five widely used technical indicators—Ichimoku Cloud Spans, the Commodity Channel Index (CCI), the Relative Strength Index (RSI), the Average Directional Index (ADX), and Williams %R—covering how each works and how traders typically interpret its signals.</p>



<h2 class="wp-block-heading">Technical vs. Fundamental Analysis: A Quick Distinction</h2>



<p class="wp-block-paragraph">Strictly technical traders focus on price history, chart patterns, and mathematical indicators rather than factors such as earnings, competitive positioning, or management quality. The goal is to identify trends and short-term price fluctuations that can be acted on quickly. Because these traders often hold positions for short periods, they pay close attention to support and resistance levels—price points where a stock has historically bounced or reversed.</p>



<h2 class="wp-block-heading">Ichimoku Cloud: Span A vs. Span B</h2>



<p class="wp-block-paragraph">The Ichimoku Kinko Hyo (often shortened to Ichimoku Cloud) is a comprehensive indicator that plots several lines on a price chart. Two of the most watched are <strong>Span A</strong> and <strong>Span B</strong>, which together form the &#8220;cloud&#8221; (also called the Kumo).</p>



<ul class="wp-block-list">
<li><strong>Span A</strong> is the midpoint of the Conversion Line and the Base Line, plotted 26 periods ahead.</li>
<li><strong>Span B</strong> is the midpoint of the highest high and lowest low over the past 52 periods, also plotted 26 periods ahead.</li>
</ul>



<p class="wp-block-paragraph">When <strong>Span A is above Span B</strong>, the cloud is colored green, which many traders interpret as a bullish signal—suggesting that upward momentum may be building. When Span B is above Span A, the cloud turns red, indicating a potentially bearish environment. Price trading above the cloud is generally considered bullish; price below the cloud is considered bearish.</p>



<h2 class="wp-block-heading">Commodity Channel Index (CCI)</h2>



<p class="wp-block-paragraph">The Commodity Channel Index was originally developed by Donald Lambert for commodity markets but has since become a popular equity indicator. The CCI measures the difference between an asset&#8217;s current price and its historical average price, normalized by mean deviation.</p>



<p class="wp-block-paragraph">Key interpretation guidelines:</p>



<ul class="wp-block-list">
<li>The indicator oscillates above and below a zero line.</li>
<li>Readings typically stay within a range of <strong>-100 to +100</strong> during normal market conditions.</li>
<li>A reading above <strong>+100</strong> may signal overbought conditions.</li>
<li>A reading below <strong>-100</strong> may indicate oversold territory.</li>
<li>Readings between -100 and +100 are generally considered neutral.</li>
</ul>



<p class="wp-block-paragraph">Traders often combine CCI readings with trend direction to decide whether an extreme reading represents a reversal opportunity or simply a continuation of a strong trend.</p>



<h2 class="wp-block-heading">Relative Strength Index (RSI)</h2>



<p class="wp-block-paragraph">The RSI is a momentum oscillator created by J. Welles Wilder, first introduced in his 1978 book <em>New Concepts in Technical Trading Systems</em>. It measures the speed and magnitude of recent price changes to evaluate whether an asset is overbought or oversold.</p>



<p class="wp-block-paragraph">RSI ranges from <strong>0 to 100</strong>:</p>



<ul class="wp-block-list">
<li>Readings <strong>above 70</strong> are commonly interpreted as overbought.</li>
<li>Readings <strong>below 30</strong> are commonly interpreted as oversold.</li>
<li>A reading near <strong>50</strong> suggests roughly balanced momentum.</li>
</ul>



<p class="wp-block-paragraph">The 14-period RSI is the most widely used setting, but traders also monitor shorter periods such as 3-day and 7-day RSI for near-term momentum shifts. Shorter RSI periods are more sensitive to recent price changes and will signal overbought or oversold conditions more frequently, while longer periods smooth out the data and generate fewer signals.</p>



<p class="wp-block-paragraph">The RSI is calculated based on the average gain versus average loss over the chosen period, using closing prices. It is displayed as a line chart beneath the main price chart, making it easy to spot divergences—situations where the RSI moves in the opposite direction of price, which can sometimes foreshadow a reversal.</p>



<h2 class="wp-block-heading">Moving Averages: 50-Day and 200-Day</h2>



<p class="wp-block-paragraph">Moving averages smooth price data to reveal the underlying trend direction. Two of the most commonly watched are the <strong>50-day moving average (MA)</strong> and the <strong>200-day MA</strong>.</p>



<ul class="wp-block-list">
<li>The <strong>200-day MA</strong> is used to assess the long-term trend. Price consistently above the 200-day MA is generally considered a bullish sign.</li>
<li>The <strong>50-day MA</strong> provides a medium-term view and is often used alongside the 200-day to identify crossover signals.</li>
<li>A <strong>Golden Cross</strong>—when the 50-day MA crosses above the 200-day MA—is widely considered a bullish signal.</li>
<li>A <strong>Death Cross</strong>—when the 50-day MA crosses below the 200-day MA—is generally interpreted as bearish.</li>
</ul>



<p class="wp-block-paragraph">Traders may also watch the 20-day MA for shorter-term trend insights, particularly in fast-moving markets.</p>



<h2 class="wp-block-heading">Average Directional Index (ADX)</h2>



<p class="wp-block-paragraph">Also developed by J. Welles Wilder, the ADX measures the <em>strength</em> of a trend—not its direction. It is plotted as a single line ranging from 0 to 100.</p>



<ul class="wp-block-list">
<li><strong>Below 20:</strong> Suggests no discernible trend; the market may be ranging.</li>
<li><strong>20–25:</strong> A borderline zone; the trend signal is not yet clear.</li>
<li><strong>Above 25:</strong> Generally indicates a strong trend is in place.</li>
<li><strong>Above 40–50:</strong> Indicates a very strong or extreme trend.</li>
</ul>



<p class="wp-block-paragraph">A <strong>rising ADX line</strong> means the existing trend—whether up or down—is gaining strength. A <strong>falling ADX line</strong> suggests the trend is weakening. The ADX itself does not indicate whether the trend is bullish or bearish; it must be read alongside directional indicators (the +DI and -DI lines) for that information.</p>



<h2 class="wp-block-heading">Williams %R</h2>



<p class="wp-block-paragraph">Developed by Larry Williams, Williams %R is a momentum indicator that compares a closing price to the high-low range over a specified period (commonly 14 days). It is designed to identify when a security may be approaching an overbought or oversold extreme and could be due for a reversal.</p>



<p class="wp-block-paragraph">Williams %R oscillates between <strong>0 and -100</strong>:</p>



<ul class="wp-block-list">
<li>Readings between <strong>0 and -20</strong> are generally considered overbought.</li>
<li>Readings below <strong>-80</strong> are generally considered oversold.</li>
<li>The further the reading is from the center, the more extreme the condition—and potentially the more likely a reversal could occur.</li>
</ul>



<p class="wp-block-paragraph">Like all oscillators, Williams %R works best in ranging markets. In strongly trending markets, overbought and oversold readings can persist for extended periods without producing a reversal, so traders typically use it in combination with a trend indicator such as ADX.</p>



<h2 class="wp-block-heading">Combining Indicators: A Practical Approach</h2>



<p class="wp-block-paragraph">No single indicator tells the complete story. Experienced technical traders typically combine multiple signals to improve the reliability of their entries and exits:</p>



<ul class="wp-block-list">
<li>Use <strong>ADX</strong> to confirm whether a trend is strong enough to trade directionally.</li>
<li>Use <strong>moving averages</strong> to determine overall trend direction.</li>
<li>Use <strong>RSI or CCI</strong> to identify momentum and potential turning points within the trend.</li>
<li>Use <strong>Williams %R</strong> to spot short-term overbought or oversold extremes.</li>
<li>Use <strong>Ichimoku Span A/B</strong> for a multi-dimensional view of support, resistance, and trend bias.</li>
</ul>



<p class="wp-block-paragraph">Beginners are generally advised to master two or three indicators before adding more. A crowded chart with conflicting signals can create more confusion than clarity. Starting with a trend indicator and a momentum oscillator is a common and practical approach.</p>



<h2 class="wp-block-heading">Final Thoughts</h2>



<p class="wp-block-paragraph">Technical indicators are tools, not guarantees. Each of the indicators covered here—Ichimoku Spans, CCI, RSI, ADX, and Williams %R—offers a different perspective on price behavior. Understanding the theory behind each indicator, including its strengths and limitations, helps traders apply them more effectively and avoid over-relying on any single signal. As with any trading methodology, risk management and position sizing remain critical regardless of how compelling the technical setup appears.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/indicator-focus-on-shares-of-tfs-financial-corp-tfsl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Continuous Integration for Salesforce Using Team Foundation Server (TFS)</title>
		<link>https://www.bestdevops.com/continuous-integration-ci-in-salesforce-using-team-foundation-server-tfs/</link>
					<comments>https://www.bestdevops.com/continuous-integration-ci-in-salesforce-using-team-foundation-server-tfs/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Tue, 21 Mar 2017 09:56:22 +0000</pubDate>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[Continuous Integration in Salesforce]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[TFS]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=999</guid>

					<description><![CDATA[A step-by-step guide to setting up Continuous Integration for Salesforce metadata deployments using Microsoft Team Foundation Server (TFS) / Visual Studio Team Services, Apache ANT, and the Salesforce Migration Toolkit.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>This guide is based on a walkthrough originally published by Jitendra Zaa at jitendrazaa.com. It covers how to configure Microsoft Team Foundation Server (TFS) — now known as Azure DevOps Server — to run automated Salesforce metadata deployments using Apache ANT and the Salesforce Migration Toolkit.</em></p>



<h2 class="wp-block-heading">Overview</h2>



<p class="wp-block-paragraph">Continuous Integration (CI) for Salesforce metadata differs from traditional software CI because deployments target a cloud platform rather than a compiled binary. The Salesforce Metadata API, exposed through the ANT Migration Toolkit, is the standard mechanism for scripted deployments. By combining TFS (or its cloud-hosted equivalent, Visual Studio Team Services) with Apache ANT, teams can trigger automated retrieve-and-deploy cycles on every code commit or on a schedule.</p>



<p class="wp-block-paragraph">This guide uses the <strong>cloud-hosted</strong> version of TFS (Visual Studio Team Services) to avoid the overhead of maintaining a local TFS installation, but the same build definition steps apply to an on-premises TFS server.</p>



<h2 class="wp-block-heading">Prerequisites</h2>



<ul class="wp-block-list">
<li>A Microsoft account (used to sign in to Visual Studio Team Services)</li>
<li>Apache ANT installed on your local machine for local testing</li>
<li>The Salesforce ANT Migration Toolkit (<code>ant-salesforce.jar</code>), downloaded from your Salesforce org&#8217;s Setup page</li>
<li>A Git client (for example, TortoiseGit) for pushing code to TFS</li>
<li>Credentials for the source and target Salesforce orgs</li>
</ul>



<h2 class="wp-block-heading">Step 1: Create a Developer Account on Visual Studio Team Services</h2>



<p class="wp-block-paragraph">Navigate to <strong>https://www.visualstudio.com/</strong> and choose <em>Get Started for free</em> under the Visual Studio Team Services section. If you do not already have a Microsoft developer account, you will be prompted to create one during sign-up. Once registered, you will land in the VSTS dashboard where you can create your first Team Project.</p>



<h2 class="wp-block-heading">Step 2: Create a TFS Git Repository for Your Salesforce Metadata</h2>



<p class="wp-block-paragraph">One advantage TFS has over Jenkins-based CI setups is that source control is built in — you do not need a separate GitHub or Bitbucket account. After logging in, use the <em>New Project</em> wizard to create a project. The wizard is straightforward: provide a project name, choose a version control type (select <strong>Git</strong>), and choose a process template.</p>



<figure class="wp-block-image"><img decoding="async" src="http://www.jitendrazaa.com/blog/wp-content/uploads/2017/03/Visual-Studio-Team-Foundation-Server-New-Project.png" alt="Visual Studio Team Foundation Server – New Project Screen"/><figcaption>Visual Studio Team Foundation Server – New Project Screen</figcaption></figure>



<p class="wp-block-paragraph">Once the project exists, clone the repository to your local machine using any Git client. For authentication you can use your VSTS username and password, or generate an SSH key pair and register the public key in your VSTS profile under <em>Security &gt; SSH public keys</em>. SSH key authentication is recommended for CI agents because it avoids storing plain-text passwords.</p>



<h2 class="wp-block-heading">Step 3: Create and Test the ANT Deployment Script Locally</h2>



<p class="wp-block-paragraph">Before wiring ANT into TFS, verify that the scripts work correctly on your local workstation. You need two files in the root of your repository: <code>build.properties</code> (credentials and environment URLs) and <code>build.xml</code> (the ANT targets).</p>



<h3 class="wp-block-heading">build.properties</h3>



<p class="wp-block-paragraph">This file stores environment-specific values. Keep it in version control for non-sensitive settings, but consider externalising passwords as TFS build variables or secrets so that plain-text credentials are never committed to source control.</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment"># build.properties</span>

<span class="hljs-comment"># Server URLs</span>
sfSandbox.serverurl = https:<span class="hljs-comment">//test.salesforce.com</span>
sfPRO.serverurl    = https:<span class="hljs-comment">//login.salesforce.com</span>

<span class="hljs-comment"># Source org (retrieve)</span>
sfdc.cb.df14.username        = your-source-org@example.com
sfdc.cb.df14.password        = yourPasswordPlusSecurityToken
sfdc.cb.df14.retrieveTarget  = src
sfdc.cb.df14.unpackaged      = src/package.xml
sfdc.cb.df14.retrieveMessage = Retrieve metadata from source Salesforce org

<span class="hljs-comment"># Target org (deploy)</span>
sfdc.cb.df15.username        = your-target-org@example.com
sfdc.cb.df15.password        = yourPasswordPlusSecurityToken
sfdc.cb.df15.retrieveTarget  = src
sfdc.cb.df15.unpackaged      = src/package.xml
sfdc.cb.df15.retrieveMessage = Deploy metadata to target Salesforce org

<span class="hljs-comment"># Salesforce ANT JAR — path relative to repository root</span>
sfdcJarFile = ant-salesforce.jar</code></span></pre>


<h3 class="wp-block-heading">build.xml</h3>



<p class="wp-block-paragraph">The <code>build.xml</code> file defines two ANT targets: <code>df14</code> retrieves metadata from the source org, and <code>deploy</code> pushes that metadata to the target org. Notice that <code>classpath</code> points to <code>${sfdcJarFile}</code>, which resolves to a path <em>relative to the repository root</em>. This is essential for cloud CI agents that have no pre-installed copy of the Salesforce JAR, so the JAR must be committed to the repository alongside the build scripts.</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">project</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"Deployment Scripts"</span> <span class="hljs-attr">default</span>=<span class="hljs-string">"deploy"</span> <span class="hljs-attr">basedir</span>=<span class="hljs-string">"."</span> <span class="hljs-attr">xmlns:sf</span>=<span class="hljs-string">"antlib:com.salesforce"</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">property</span> <span class="hljs-attr">file</span>=<span class="hljs-string">"build.properties"</span>/&gt;</span>

    <span class="hljs-comment">&lt;!-- Retrieve metadata from source org --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">target</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"df14"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">taskdef</span> <span class="hljs-attr">resource</span>=<span class="hljs-string">"com/salesforce/antlib.xml"</span>
                 <span class="hljs-attr">uri</span>=<span class="hljs-string">"antlib:com.salesforce"</span>
                 <span class="hljs-attr">classpath</span>=<span class="hljs-string">"${sfdcJarFile}"</span>/&gt;</span>

        <span class="hljs-tag">&lt;<span class="hljs-name">echo</span> <span class="hljs-attr">message</span>=<span class="hljs-string">"Retrieving as: ${sfdc.cb.df14.username}"</span>/&gt;</span>

        <span class="hljs-tag">&lt;<span class="hljs-name">sf:retrieve</span>
            <span class="hljs-attr">username</span>=<span class="hljs-string">"${sfdc.cb.df14.username}"</span>
            <span class="hljs-attr">password</span>=<span class="hljs-string">"${sfdc.cb.df14.password}"</span>
            <span class="hljs-attr">serverurl</span>=<span class="hljs-string">"${sfPRO.serverurl}"</span>
            <span class="hljs-attr">retrieveTarget</span>=<span class="hljs-string">"${sfdc.cb.df14.retrieveTarget}"</span>
            <span class="hljs-attr">unpackaged</span>=<span class="hljs-string">"${sfdc.cb.df14.unpackaged}"</span>/&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">target</span>&gt;</span>

    <span class="hljs-comment">&lt;!-- Deploy metadata to target org --&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">target</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"deploy"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">taskdef</span> <span class="hljs-attr">resource</span>=<span class="hljs-string">"com/salesforce/antlib.xml"</span>
                 <span class="hljs-attr">uri</span>=<span class="hljs-string">"antlib:com.salesforce"</span>
                 <span class="hljs-attr">classpath</span>=<span class="hljs-string">"${sfdcJarFile}"</span>/&gt;</span>

        <span class="hljs-tag">&lt;<span class="hljs-name">sf:deploy</span>
            <span class="hljs-attr">username</span>=<span class="hljs-string">"${sfdc.cb.df15.username}"</span>
            <span class="hljs-attr">password</span>=<span class="hljs-string">"${sfdc.cb.df15.password}"</span>
            <span class="hljs-attr">serverurl</span>=<span class="hljs-string">"${sfPRO.serverurl}"</span>
            <span class="hljs-attr">deployRoot</span>=<span class="hljs-string">"src"</span>
            <span class="hljs-attr">maxPoll</span>=<span class="hljs-string">"1000"</span>
            <span class="hljs-attr">testLevel</span>=<span class="hljs-string">"NoTestRun"</span>
            <span class="hljs-attr">checkOnly</span>=<span class="hljs-string">"false"</span>
            <span class="hljs-attr">pollWaitMillis</span>=<span class="hljs-string">"10000"</span>
            <span class="hljs-attr">rollbackOnError</span>=<span class="hljs-string">"true"</span>/&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">target</span>&gt;</span>

<span class="hljs-tag">&lt;/<span class="hljs-name">project</span>&gt;</span></code></span></pre>


<p class="wp-block-paragraph">To test locally, run the following command from the repository root:</p>


<pre class="wp-block-code"><span><code class="hljs">ant df14 deploy</code></span></pre>


<p class="wp-block-paragraph">The <code>df14</code> target retrieves metadata from the source Salesforce instance; the <code>deploy</code> target then pushes that retrieved metadata to the target instance. Confirm that both targets complete without errors before moving to the TFS build definition.</p>



<h3 class="wp-block-heading">Files to commit to the repository</h3>



<ul class="wp-block-list">
<li><code>build.xml</code></li>
<li><code>build.properties</code> (with passwords replaced by TFS build variables in production)</li>
<li><code>ant-salesforce.jar</code> — the Salesforce Migration Toolkit JAR, committed so the TFS cloud agent can find it</li>
<li><code>src/package.xml</code> — your metadata manifest</li>
<li><code>src/</code> — the retrieved metadata directory</li>
</ul>



<h2 class="wp-block-heading">Step 4: Create a New Build Definition in Team Foundation Server</h2>



<p class="wp-block-paragraph">With the scripts in the repository, you can now tell TFS how to run them automatically.</p>



<p class="wp-block-paragraph">In the VSTS portal, navigate to <strong>Build &amp; Release → Builds → New definition</strong> and select the <strong>ANT</strong> template.</p>



<figure class="wp-block-image"><img decoding="async" src="http://www.jitendrazaa.com/blog/wp-content/uploads/2017/03/Team-Foundation-Server-TFS-New-Build-definition-1024x804.png" alt="Team Foundation Server (TFS) – New Build definition"/><figcaption>Team Foundation Server (TFS) – New Build definition</figcaption></figure>



<h3 class="wp-block-heading">Select the repository and branch</h3>



<p class="wp-block-paragraph">On the repository selection screen, choose your TFS-hosted Git repository. You can also connect to GitHub, a remote Git server, or SVN if your code lives elsewhere. Select the branch you want this build definition to monitor. TFS supports multiple build definitions per project, so you can configure, for example, a nightly build on <code>main</code> and a triggered build on a <code>develop</code> branch independently.</p>



<figure class="wp-block-image"><img decoding="async" src="http://www.jitendrazaa.com/blog/wp-content/uploads/2017/03/Team-Foundation-Server-TFS-New-Build-definition-Select-repository.png" alt="Team Foundation Server (TFS) – New Build definition – Select repository"/><figcaption>Team Foundation Server (TFS) – New Build definition – Select repository</figcaption></figure>



<h3 class="wp-block-heading">Configure the ANT build step</h3>



<p class="wp-block-paragraph">In the build steps editor, configure the ANT task:</p>



<ul class="wp-block-list">
<li><strong>ANT build file</strong>: <code>build.xml</code></li>
<li><strong>Options</strong>: specify the targets to run, for example <code>df14 deploy</code>, or leave blank to use the default target defined in <code>build.xml</code></li>
<li><strong>JDK version</strong>: ensure a compatible JDK is selected on the build agent</li>
</ul>



<figure class="wp-block-image"><img decoding="async" src="http://www.jitendrazaa.com/blog/wp-content/uploads/2017/03/Team-Foundation-Server-TFS-New-Build-definition-add-build-steps-1024x594.png" alt="Team Foundation Server (TFS) – New Build definition – add build steps"/><figcaption>Team Foundation Server (TFS) – New Build definition – add build steps</figcaption></figure>



<p class="wp-block-paragraph">Save the build definition. You can trigger it manually the first time using the <em>Queue build</em> button to confirm everything works end to end before enabling a continuous integration trigger.</p>



<h2 class="wp-block-heading">Security Considerations</h2>



<p class="wp-block-paragraph">Storing Salesforce credentials in <code>build.properties</code> and committing that file to source control is convenient for demonstration purposes but is a security risk in production. Instead:</p>



<ul class="wp-block-list">
<li>Define Salesforce usernames and passwords as <strong>TFS/VSTS build variables</strong> marked as secret. Reference them in <code>build.xml</code> using ANT property overrides passed via the build options field (e.g., <code>-Dsfdc.cb.df15.password=$(SF_PASSWORD)</code>).</li>
<li>Use a <strong>connected app with OAuth</strong> and a session ID instead of username/password where your tooling supports it.</li>
<li>Consider whether committing <code>ant-salesforce.jar</code> to Git is appropriate for your organisation; an alternative is to download it as an artifact during the build using a script step.</li>
</ul>



<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Setting up Salesforce CI with TFS involves four main steps: creating a VSTS account and project, pushing your Salesforce metadata and ANT scripts (including the Salesforce JAR) to the built-in Git repository, validating the ANT script locally, and then creating an ANT build definition in TFS that executes the same script on every commit or on a schedule. The integrated source control in TFS/VSTS reduces the number of third-party tools required compared to a Jenkins-based approach, making it a practical choice for teams already in the Microsoft ecosystem.</p>



<p class="wp-block-paragraph"><em>Original source: jitendrazaa.com</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/continuous-integration-ci-in-salesforce-using-team-foundation-server-tfs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
