<?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>VSTS &#8211; Best DevOps</title>
	<atom:link href="https://www.bestdevops.com/tag/vsts/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>Mon, 12 Oct 2026 11:07:02 +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>Continuous Delivery with VSTS and Jenkins: Triggering Builds Only on PR Merge</title>
		<link>https://www.bestdevops.com/continuous-delivery-with-vsts-and-jenkins/</link>
					<comments>https://www.bestdevops.com/continuous-delivery-with-vsts-and-jenkins/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Thu, 08 Jun 2017 09:35:02 +0000</pubDate>
				<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[BestDevOps]]></category>
		<category><![CDATA[CD]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[vs-team-services]]></category>
		<category><![CDATA[VSTS]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=1775</guid>

					<description><![CDATA[Learn how to configure a reliable continuous delivery pipeline using Visual Studio Team Services (VSTS) and Jenkins, triggering builds only when a pull request is merged to master—without infinite loops or spurious deployments.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>This article is based on a real-world integration challenge originally discussed on Stack Overflow, expanded here with practical solutions for DevOps engineers setting up CD pipelines with VSTS (now Azure DevOps) and Jenkins.</em></p>



<h2 class="wp-block-heading">The Goal: Merge-Only Deployments</h2>



<p class="wp-block-paragraph">A common and sensible continuous delivery workflow looks like this:</p>



<ol class="wp-block-list">
<li>A developer branches off <code>master</code>, makes changes, and opens a pull request.</li>
<li>A peer reviews and merges the PR into <code>master</code>.</li>
<li>An automation system detects the merge and:
<ol>
<li>Increments a version number stored in a file in the repository.</li>
<li>Commits the version bump back to <code>master</code>.</li>
<li>Runs the build.</li>
<li>Deploys the artifact.</li>
</ol>
</li>
</ol>



<p class="wp-block-paragraph">This is straightforward in concept, but wiring it up correctly between VSTS (now called Azure DevOps) and Jenkins introduces several non-obvious pitfalls.</p>



<h2 class="wp-block-heading">The VSTS Service Hook Problem</h2>



<p class="wp-block-paragraph">VSTS provides Service Hooks that can trigger external systems like Jenkins. The three hooks most relevant to this workflow are:</p>



<ol class="wp-block-list">
<li><strong>Build completed</strong> – fires when a VSTS build finishes.</li>
<li><strong>Code pushed</strong> – fires on any push to a repository.</li>
<li><strong>Pull request merge commit created</strong> – fires when activity occurs on a pull request.</li>
</ol>



<p class="wp-block-paragraph">The third option sounds ideal, but it does <strong>not</strong> fire only on merge. It fires whenever a new commit is pushed to the source branch of an open pull request as well. This means every intermediate commit a developer pushes while their PR is still open will trigger the Jenkins job—causing redundant and potentially broken deployments.</p>



<h2 class="wp-block-heading">The &#8220;Code Pushed&#8221; Infinite Loop</h2>



<p class="wp-block-paragraph">Switching to the <strong>Code pushed</strong> hook seems like it could work if you filter by branch, but it introduces a different problem: the Jenkins pipeline itself commits back to <code>master</code> when it bumps the version number. That commit triggers the hook again, which kicks off another Jenkins run, creating an infinite loop of builds and deployments.</p>



<figure class="wp-block-image"><img decoding="async" src="https://i.stack.imgur.com/5OIZn.png" alt="Diagram showing the infinite loop between VSTS Code Pushed hook and Jenkins version commit" /></figure>



<h2 class="wp-block-heading">The Jenkins Poll SCM Limitation</h2>



<p class="wp-block-paragraph">Jenkins has a built-in <strong>Poll SCM</strong> trigger that checks the repository on a cron-like schedule. However, when using it with a multi-branch or remotely-hosted repository, it can be unclear which repository and branch the job will poll without explicitly configuring the Git plugin settings in the job. Polling also introduces latency and does not cleanly distinguish between a version-bump commit (made by Jenkins itself) and a genuine developer merge.</p>



<h2 class="wp-block-heading">Recommended Solutions</h2>



<h3 class="wp-block-heading">Option 1: Filter Triggers Using a Commit Message Convention</h3>



<p class="wp-block-paragraph">Tag the version-bump commit with a recognisable message such as <code>[ci skip]</code> or a custom prefix like <code>[version bump]</code>. In your Jenkins pipeline or job script, inspect the commit message at the start of the build and abort early if the trigger commit matches that pattern.</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// Example Jenkinsfile guard</span>
def commitMsg = sh(returnStdout: <span class="hljs-literal">true</span>, <span class="hljs-attr">script</span>: <span class="hljs-string">'git log -1 --pretty=%B'</span>).trim()
<span class="hljs-keyword">if</span> (commitMsg.contains(<span class="hljs-string">'&#91;version bump]'</span>)) {
    currentBuild.result = <span class="hljs-string">'ABORTED'</span>
    error(<span class="hljs-string">'Skipping build triggered by version bump commit.'</span>)
}</code></span></pre>


<p class="wp-block-paragraph">This breaks the loop without requiring changes to the VSTS hook configuration.</p>



<h3 class="wp-block-heading">Option 2: Use a Dedicated Service Account for Version Commits</h3>



<p class="wp-block-paragraph">Configure Jenkins to push version-bump commits using a dedicated service account or bot user. In the VSTS <strong>Code pushed</strong> Service Hook, set the filter to exclude pushes made by that account. This prevents Jenkins-originated commits from re-triggering the pipeline without requiring any in-pipeline logic.</p>



<h3 class="wp-block-heading">Option 3: Use the VSTS REST API to Verify PR Status Before Proceeding</h3>



<p class="wp-block-paragraph">When the <strong>Pull request merge commit created</strong> hook fires, VSTS passes contextual payload data to Jenkins. In the Jenkins job, add an early step that calls the VSTS REST API to confirm the PR status is <code>completed</code> (i.e., actually merged) before proceeding with the build and deployment stages. If the PR is still active, the job exits cleanly without deploying.</p>



<h3 class="wp-block-heading">Option 4: Move Version Bumping Out of the Jenkins Pipeline</h3>



<p class="wp-block-paragraph">Consider separating version management from the build trigger entirely. Options include:</p>



<ul class="wp-block-list">
<li>Use a VSTS build task or release pipeline step to handle the version bump after the Jenkins build succeeds, not before.</li>
<li>Derive the version number from the Git tag or commit count at build time rather than writing it back to the repository, eliminating the need for a post-merge commit entirely.</li>
<li>Use a tool like <a href="https://semver.org/">Semantic Versioning</a> with GitVersion or a similar utility that reads the version from Git history without modifying it.</li>
</ul>



<h3 class="wp-block-heading">Option 5: Replace Service Hooks with Jenkins Multibranch Pipeline and VSTS Git Plugin</h3>



<p class="wp-block-paragraph">The Jenkins Git plugin supports polling a specific VSTS Git repository and branch. In a Multibranch Pipeline job, configure the branch source to point at your VSTS repository and set the branch filter to <code>master</code> only. This ensures:</p>



<ul class="wp-block-list">
<li>Only changes to <code>master</code> are acted upon.</li>
<li>Feature branches are ignored unless you explicitly add them.</li>
<li>You can combine polling with a short interval or a VSTS webhook pointing at the Jenkins Git endpoint to reduce latency.</li>
</ul>



<p class="wp-block-paragraph">To prevent version-bump commits from re-triggering, combine this with Option 1 (commit message filtering).</p>



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



<figure class="wp-block-table"><table><thead><tr><th>Approach</th><th>Breaks Loop?</th><th>Merge-Only?</th><th>Complexity</th></tr></thead><tbody><tr><td>Commit message skip flag</td><td>Yes</td><td>Partial</td><td>Low</td></tr><tr><td>Bot/service account exclusion in hook filter</td><td>Yes</td><td>Partial</td><td>Low–Medium</td></tr><tr><td>VSTS REST API PR status check in Jenkins</td><td>No (mitigates)</td><td>Yes</td><td>Medium</td></tr><tr><td>Eliminate version-bump commit</td><td>Yes</td><td>Yes</td><td>Medium</td></tr><tr><td>Multibranch pipeline + commit filter</td><td>Yes</td><td>Yes</td><td>Medium</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Key Takeaways</h2>



<ul class="wp-block-list">
<li>The VSTS <strong>Pull request merge commit created</strong> hook fires on all PR-related commits, not only on the merge itself—do not rely on it alone to gate deployments.</li>
<li>Any pipeline that commits back to the monitored branch must include a mechanism to prevent retriggering.</li>
<li>Eliminating the version-bump commit (by deriving version from Git metadata) is the cleanest long-term solution and removes an entire class of trigger-loop problems.</li>
<li>VSTS is now called <strong>Azure DevOps</strong>; most of these concepts and hook types carry over to the modern platform.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/continuous-delivery-with-vsts-and-jenkins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Continuous Integration with Visual Studio Team Services and Azure App Service</title>
		<link>https://www.bestdevops.com/continuous-integration-using-visual-studio-team-service/</link>
					<comments>https://www.bestdevops.com/continuous-integration-using-visual-studio-team-service/#respond</comments>
		
		<dc:creator><![CDATA[anil]]></dc:creator>
		<pubDate>Mon, 17 Apr 2017 13:49:17 +0000</pubDate>
				<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[automatic build and release]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Team Service]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VSTS]]></category>
		<guid isPermaLink="false">http://www.bestdevops.com/?p=1312</guid>

					<description><![CDATA[Learn how to configure a full CI/CD pipeline using Visual Studio Team Services (VSTS): create a Git repository, push an ASP.NET Web API project, set up automated builds, and release automatically to Azure App Service.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>This article is based on a guide originally published on <strong>C# Corner</strong>. It covers the end-to-end process of setting up Continuous Integration and Continuous Deployment (CI/CD) for an ASP.NET Web API application using Visual Studio Team Services (VSTS) and Azure App Service.</em></p>



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



<p class="wp-block-paragraph">Visual Studio Team Services (VSTS) — now rebranded as Azure DevOps — lets you configure a project so that every code commit automatically triggers a build and, on success, deploys the updated application to Azure App Service. This guide walks through that complete setup for an ASP.NET Web API application, from creating a Git repository in VSTS through to verifying a live deployment in Azure.</p>



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



<ul class="wp-block-list"><li>Visual Studio 2015 or later (Visual Studio 2017 used in this example)</li><li>An active Azure subscription</li><li>A Visual Studio Team Services (VSTS) account</li><li>An existing ASP.NET Web API project on your local machine</li></ul>



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



<ol class="wp-block-list"><li>Create a new project in VSTS with Git version control</li><li>Push an existing local project to the new Git repository from Visual Studio</li><li>Configure a Build Definition in VSTS with Continuous Integration enabled</li><li>Create an Azure Web App as the deployment target</li><li>Configure a Release Definition in VSTS with Continuous Deployment to Azure App Service</li><li>Commit a change and verify the automated build and deployment</li></ol>



<h2 class="wp-block-heading">Step 1: Create a New Project in VSTS with Git Version Control</h2>



<p class="wp-block-paragraph">Sign in to your VSTS account and click <strong>New Project</strong> on the home page.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image001.JPG" alt="VSTS home page showing the New Project button"/></figure>



<p class="wp-block-paragraph">In the <strong>Create new project</strong> dialog:</p>



<ul class="wp-block-list"><li>Enter a <strong>project name</strong> (e.g., <em>KendoGrid</em>)</li><li>Set <strong>Version control</strong> to <em>Git</em></li><li>Choose a <strong>Work item process</strong> (e.g., Agile)</li><li>Click <strong>Create</strong></li></ul>



<p class="wp-block-paragraph">You can use either Git or Team Foundation Version Control (TFVC). Git is the recommended choice for most modern workflows due to its distributed nature and broad tooling support.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image002.JPG" alt="New project creation dialog in VSTS with Git version control selected"/></figure>



<h2 class="wp-block-heading">Step 2: Push an Existing Project to the VSTS Git Repository</h2>



<p class="wp-block-paragraph">Open your existing ASP.NET Web API project in Visual Studio (<strong>File &gt; Open</strong>). Once the project is loaded, look at the bottom-right status bar for the <strong>Add to Source Control</strong> option and click it.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image003.JPG" alt="Visual Studio status bar showing the Add to Source Control option"/></figure>



<p class="wp-block-paragraph">The <strong>Team Explorer</strong> window opens and presents two options:</p>



<ul class="wp-block-list"><li><strong>Push to Visual Studio Team Services</strong> — creates a new repository on your VSTS account automatically</li><li><strong>Push to Remote Repository</strong> — connects to the Git repository you already created in Step 1</li></ul>



<p class="wp-block-paragraph">Because you already created the repository in VSTS, choose <strong>Push to Remote Repository</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image004.JPG" alt="Team Explorer showing push options"/></figure>



<p class="wp-block-paragraph">Click <strong>Publish Git Repo</strong>, paste the remote Git URL from your VSTS project, and click <strong>Publish</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image005.JPG" alt="Publish Git Repo dialog in Team Explorer"/></figure>



<p class="wp-block-paragraph">After a successful push, you can browse to the <strong>Code</strong> tab of your VSTS project to confirm that all files are present in the repository.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image006.JPG" alt="VSTS Code tab showing the published project files"/></figure>



<h2 class="wp-block-heading">Step 3: Configure a Build Definition in VSTS</h2>



<p class="wp-block-paragraph">From the repository page in VSTS, click <strong>Set up build</strong> in the top-right corner.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image007.JPG" alt="VSTS repository page with Set up build button highlighted"/></figure>



<p class="wp-block-paragraph">The <strong>Create new build definition</strong> wizard opens. Select the <strong>ASP.NET (Preview)</strong> template, which pre-populates the build steps appropriate for an ASP.NET project (NuGet restore, build, test, publish).</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image008.JPG" alt="Create new build definition window"/></figure>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image009.JPG" alt="Build template selection showing ASP.NET Preview template"/></figure>



<p class="wp-block-paragraph">On the settings screen, check <strong>Continuous Integration</strong>. This tells VSTS to trigger a build automatically on every commit pushed to the repository. Click <strong>Create</strong>.</p>



<p class="wp-block-paragraph">VSTS will pre-load all required build tasks. Review the steps (NuGet restore, MSBuild, VSTest, Publish Build Artifacts) and adjust only if your project requires non-default settings. When finished, click <strong>Save</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image010.JPG" alt="VSTS build definition editor showing auto-loaded build tasks"/></figure>



<h2 class="wp-block-heading">Step 4: Create an Azure Web App as the Deployment Target</h2>



<p class="wp-block-paragraph">Log in to the <a href="https://portal.azure.com" rel="noopener">Azure Portal</a>. Create a new Web App by navigating to <strong>New &gt; Web + Mobile &gt; Web App</strong>. Complete the required fields (App name, Resource Group, App Service Plan) and click <strong>Create</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image011.jpg" alt="Azure Portal showing Web App creation"/></figure>



<p class="wp-block-paragraph">Once provisioned, the overview blade shows the default URL for your new App Service (e.g., <code>https://&lt;your-app-name&gt;.azurewebsites.net</code>). Keep this URL handy — you&#8217;ll need it when configuring the release definition.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image012.JPG" alt="Azure Web App overview blade"/></figure>



<h2 class="wp-block-heading">Step 5: Configure a Release Definition in VSTS</h2>



<p class="wp-block-paragraph">In VSTS, navigate to <strong>Build &amp; Release &gt; Releases</strong> and click <strong>New Definition</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image013.jpg" alt="VSTS Build and Release menu with Releases selected"/></figure>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image014.JPG" alt="VSTS Releases page showing New Definition button"/></figure>



<p class="wp-block-paragraph">From the list of deployment templates, select <strong>Azure App Service Deployment</strong> and click <strong>Next</strong>.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image015.JPG" alt="Release definition template selection showing Azure App Service Deployment"/></figure>



<p class="wp-block-paragraph">On the next screen:</p>



<ul class="wp-block-list"><li>Select your <strong>Project</strong> and <strong>Build Definition</strong> from the dropdowns</li><li>Check <strong>Continuous Deployment</strong> to trigger a release automatically after every successful build</li><li>Click <strong>Create</strong></li></ul>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image016.JPG" alt="Release definition source configuration with Continuous Deployment checkbox"/></figure>



<p class="wp-block-paragraph">In the release definition editor:</p>



<ul class="wp-block-list"><li>VSTS automatically lists the Azure subscriptions associated with your login. Select the appropriate subscription.</li><li>Click <strong>Authorize</strong> to grant VSTS access to your Azure resources.</li><li>Select the <strong>App Service Name</strong> you created in Step 4 from the dropdown.</li><li>Enter the App Service URL in the <strong>App Service URL</strong> field.</li><li>Click <strong>Save</strong>.</li></ul>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image017.JPG" alt="Release definition editor showing Azure subscription and App Service configuration"/></figure>



<h2 class="wp-block-heading">Step 6: Commit a Change and Verify the Pipeline</h2>



<p class="wp-block-paragraph">With the CI/CD pipeline in place, any commit pushed to the VSTS Git repository will automatically trigger a build. If the build succeeds, a release is triggered automatically and the application is deployed to Azure App Service.</p>



<p class="wp-block-paragraph">To test this, make a small change to your application (for example, update a page title in an HTML file) and commit and sync the change from Visual Studio&#8217;s Team Explorer.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image019.JPG" alt="Visual Studio Team Explorer showing a commit ready to be pushed"/></figure>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image020.jpg" alt="Sync screen in Team Explorer after committing changes"/></figure>



<p class="wp-block-paragraph">Navigate to <strong>Build &amp; Release &gt; Builds</strong> in VSTS. You should see a build queued or in progress. VSTS also sends a build status notification email.</p>



<h3 class="wp-block-heading">Build in Progress</h3>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image021.JPG" alt="VSTS build in progress status"/></figure>



<h3 class="wp-block-heading">Build Succeeded</h3>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image022.JPG" alt="VSTS build succeeded notification"/></figure>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image023.JPG" alt="VSTS build summary page showing successful build"/></figure>



<p class="wp-block-paragraph">Once the build completes, the release is triggered automatically. Navigate to <strong>Build &amp; Release &gt; Releases</strong> to confirm the deployment status.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image024.JPG" alt="VSTS release page showing successful deployment to Azure App Service"/></figure>



<p class="wp-block-paragraph">With a successful deployment, open the Azure Web App URL in your browser to confirm the changes are live.</p>



<figure class="wp-block-image"><img decoding="async" src="http://csharpcorner.mindcrackerinc.netdna-cdn.com/article/continuous-integration-using-visual-studio-team-service/Images/image025.JPG" alt="Deployed ASP.NET application running in Azure App Service"/></figure>



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



<p class="wp-block-paragraph">This walkthrough covered the complete CI/CD setup from code to cloud using VSTS and Azure App Service:</p>



<ol class="wp-block-list"><li>Created a new VSTS project with Git version control</li><li>Pushed an existing ASP.NET Web API project to the VSTS Git repository from Visual Studio</li><li>Configured a Build Definition with the ASP.NET template and Continuous Integration enabled</li><li>Provisioned an Azure Web App as the deployment target</li><li>Configured a Release Definition using the Azure App Service Deployment template with Continuous Deployment enabled</li><li>Verified that a code commit triggers an automated build and deployment end-to-end</li></ol>



<p class="wp-block-paragraph"><strong>Note:</strong> Visual Studio Team Services (VSTS) was rebranded to <strong>Azure DevOps</strong> in September 2018. The underlying concepts — pipelines, build definitions, release definitions — remain the same, though the UI and terminology have evolved. If you are using Azure DevOps today, the equivalent features are found under <strong>Pipelines &gt; Builds</strong> and <strong>Pipelines &gt; Releases</strong>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bestdevops.com/continuous-integration-using-visual-studio-team-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
