{"id":1613,"date":"2014-04-02T01:43:00","date_gmt":"2014-04-02T01:43:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/visualstudioalm\/2014\/04\/02\/deploy-automatically-to-virtual-machines-in-windows-azure-using-visual-studio-release-management\/"},"modified":"2022-07-18T01:40:26","modified_gmt":"2022-07-18T09:40:26","slug":"deploy-automatically-to-virtual-machines-in-windows-azure-using-visual-studio-release-management","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/devops\/deploy-automatically-to-virtual-machines-in-windows-azure-using-visual-studio-release-management\/","title":{"rendered":"Deploy automatically to virtual machines in Windows Azure using Visual Studio Release Management"},"content":{"rendered":"<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Visual Studio Release Management can be used to achieve continuous deployment\u00a0to\u00a0virtual machines in Windows Azure. When configured correctly, Release Management is able to deploy to a VM residing on the cloud just as easily as to a VM hosted locally. This article will explain the steps in order to start a VM on the cloud, deploy to it, and stop it once it is not needed anymore.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">When deploying to a VM on the cloud, it might be required that you start or stop the VM. Stopping a VM between releases is useful to avoid consuming Azure&#8217;s resources. Starting and stopping an Azure&#8217;s VM requires installing a proxy Release Management Deployer and installing Azure&#8217;s credentials and tools on the same machine.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Let&#8217;s first configure the proxy Release Management Deployer. A Release Management Deployer can be installed on any machine that has access to Release Management server. This proxy Deployer will be the one receiving instructions to start (or stop) the VM that resides on the cloud.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">If\u00a0<a href=\"https:\/\/www.windowsazure.com\/en-us\/manage\/downloads\/\">Windows Azure PowerShell cmdlets<\/a>\u00a0is installed and properly configured on the proxy deployer\u00a0(subscription is imported with the right credentials), you can go directly to step 4.<\/span><\/p>\n<h3><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Step 1 \u2013 Create Windows Azure Account<\/span><\/h3>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">In this step, you need to get a Windows Azure account. You can get the Windows Azure 90-days free subscription with no cost or obligations at\u00a0<a href=\"http:\/\/www.windowsazure.com\/\">http:\/\/www.windowsazure.com\/<\/a>\u00a0<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0602.1.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0602.1.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<h3><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Step 2 \u2013 Install Windows Azure SDK for .NET<\/span><\/h3>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">We now install Windows Azure SDK for .NET on the proxy Deployer machine. It is available\u00a0<a href=\"http:\/\/www.windowsazure.com\/en-us\/develop\/net\/\">here<\/a>.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/8468.2.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/8468.2.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">You need the .NET Framework 4.5 &#8211; available\u00a0<a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/5a4x27ek\">here<\/a>\u00a0and\u00a0Windows Azure Powershell.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0841.3.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0841.3.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<h3><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Step 3 \u2013 Setup credential in Windows Azure PowerShell<\/span><\/h3>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Still on the proxy Deployer machine, we now configure the Windows Azure account to be able to execute\u00a0<strong>Azure PowerShell Command<\/strong>without specifying credentials when executing commands.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>1.<\/strong>\u00a0Open\u00a0<strong>Windows Azure PowerShell\u00a0<\/strong><\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">\u00a0Execute this commands:<\/span><\/p>\n<pre class=\"scroll\"><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><code class=\"php\">Set-ExecutionPolicy -ExecutionPolicy RemoteSigned<\/code><\/span><\/pre>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0216.4.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0216.4.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<pre class=\"scroll\"><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><code class=\"php\">Get-AzurePublishSettingsFile<\/code><\/span><\/pre>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0741.6.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/0741.6.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>2.<\/strong>\u00a0Sign in<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/6724.7.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/6724.7.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>3.<\/strong>\u00a0Download and save the\u00a0<strong>.publishSettings<\/strong>\u00a0file locally<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong><em>Security note:<\/em><\/strong>\u00a0<em>This file contains an encoded management certificate that will serve as your credentials to administer all aspects of your subscriptions and related services. Store this file in a secure location or delete it after you finished these steps.<\/em><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>4.<\/strong>\u00a0Import the downloaded\u00a0<strong>.publishSettings<\/strong>\u00a0file by executing the following command:<\/span><\/p>\n<p>\u00a0<\/p>\n<pre class=\"scroll\"><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><code class=\"php\">Import-AzurePublishSettingsFile \"&lt;publishSettings-file&gt;\"<\/code><\/span><\/pre>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/6116.8.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/6116.8.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>5.<\/strong>\u00a0Link the Subscription to Storage Account<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">In order to link the storage Account to the subscription, we need to know the name of the Storage Account created by default for your Windows Azure Account.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Go to\u00a0<em>Windows Azure | Storage<\/em><\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/8231.9.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/8231.9.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Once we know the name of the Storage Account, use this command to link to your subscription:<\/span><\/p>\n<pre class=\"scroll\"><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><code class=\"php\">Set-AzureSubscription &ndash;CurrentStorageAccount \"&lt;currentStorageAccount&gt;\" &ndash;subscriptionName \"&lt;subscriptionName&gt;\"<\/code><\/span><\/pre>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/3441.10.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/3441.10.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>6.<\/strong>\u00a0We also want to set this subscription as the default one.<\/span><\/p>\n<pre class=\"scroll\"><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><code class=\"php\">Select-AzureSubscription -Default \"&lt;SubscriptionName&gt;\"<\/code><\/span><\/pre>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/7585.11.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/7585.11.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>7.<\/strong>\u00a0Use this command to get the subscription information.<\/span><\/p>\n<pre class=\"scroll\"><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><code class=\"php\">Get-AzureSubscription<\/code><\/span><\/pre>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/3438.12.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/3438.12.png\" alt=\"\" border=\"0\" \/><\/a><\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Make sure the\u00a0<strong>CurrentStorageAccount<\/strong>\u00a0is set with your\u00a0<em>Storage Account name<\/em>\u00a0and the <strong>IsDefault<\/strong>\u00a0attribute is set to\u00a0<em>true<\/em>.<\/span><\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Your machine is now ready to run\u00a0<strong>Windows Azure Powershell<\/strong>.<\/span><\/p>\n<h3><span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>Step 4 \u2013 Configure\u00a0Release Management to\u00a0deploy to virtual machine in Azure<\/strong><\/span><\/h3>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">We will now configure Release Management to allow deployment to the virtual machine in Azure.<\/span><\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong style=\"font-family: tahoma, arial, helvetica, sans-serif\">1.<\/strong>\u00a0Prerequisites<\/span>\n<\/p>\n<p style=\"padding-left: 60px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>a.<\/strong> Azure&#8217;s VM must be started<\/span>\n<\/p>\n<p style=\"padding-left: 60px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>b.<\/strong> Because Windows Azure resides outside your network, you will need to publish the Release Management Server endpoints through your firewall. Release Management supports\u00a0secure connectivity over HTTPS. The easiest way to manage this is to use a Reverse Proxy and let it redirect all incoming HTTPS traffic to the Release Management\u00a0Server endpoints. Internally, Release Management can be configured to run over HTTP. It is the job of the Reverse Proxy to convert all HTTPS traffic to HTTP when\u00a0directing requests to Release Management. Once published, you can configure the Release Management Deployer that lives in your Azure VM to connect to Release Management over this\u00a0public endpoint.<\/span>\n<\/p>\n<p style=\"padding-left: 60px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>c.<\/strong> Release Management deployer must be configured in the Azure&#8217;s VM (service started with sufficient privileges).<\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>2.<\/strong>\u00a0Open Release Management<\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>3.<\/strong>\u00a0Create a New Server,\u00a0<em>Configure\u00a0Paths | Manage Servers | New<\/em><\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>4.\u00a0<\/strong>Enter the name of the VM\u00a0as the server&#8217;s Name<\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>5.\u00a0<\/strong>Set the\u00a0<strong>Drop Location Access<\/strong>\u00a0to\u00a0<em>Through IR Server over HTTP<\/em>\u00a0so that all files that have to be transferred will be sent through the Release Management Server (in that case, the VM on Azure does not need access to the drop location).<\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>6.\u00a0<\/strong>Complete other needed information and Save.<\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>7.<\/strong>\u00a0Create any number of components that needs to be deployed to Azure through\u00a0<em>Configure Apps | Components | New<\/em><\/span>\n<\/p>\n<p style=\"padding-left: 30px\">\n  <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>8.<\/strong>\u00a0In the release template, add the components needed to deploy over the Azure&#8217;s VM<\/span>\n<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Final configuration of the Release Template could look like similar to this:<\/span><\/p>\n<table style=\"width: 605px\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"bottom\">\n<p style=\"text-align: left\">\n          <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>\u00a0 Development Stage<\/strong><\/span>\n        <\/p>\n<\/td>\n<td valign=\"bottom\">\n<p style=\"text-align: left\">\n          <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>\u00a0 QA Stage<\/strong><\/span>\n        <\/p>\n<\/td>\n<td valign=\"bottom\">\n<p style=\"text-align: left\">\n          <span style=\"font-family: tahoma, arial, helvetica, sans-serif\"><strong>\u00a0 Production Stage<\/strong><\/span>\n        <\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"bottom\">\n        <span style=\"font-family: tahoma, arial, helvetica, sans-serif\">\u00a0<a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/3021.13.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/3021.13.png\" alt=\"\" border=\"0\" \/><\/a><\/span>\n      <\/td>\n<td valign=\"bottom\">\n        <span style=\"font-family: tahoma, arial, helvetica, sans-serif\">\u00a0<a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/1325.14.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/1325.14.png\" alt=\"\" border=\"0\" \/><\/a><\/span>\n      <\/td>\n<td valign=\"bottom\">\n        <span style=\"font-family: tahoma, arial, helvetica, sans-serif\">\u00a0<a href=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/6505.15.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/devops\/wp-content\/uploads\/sites\/6\/2014\/04\/6505.15.png\" alt=\"\" border=\"0\" \/><\/a><\/span>\n      <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u00a0<\/p>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Things to notice from this configuration:<\/span><\/p>\n<ul>\n<li><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">Before installing a component (WebServicesComponent in this case), we make sure the VM is started.<\/span><\/li>\n<li><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">The target server for the actions\u00a0<strong>Start VM in Azure<\/strong>\u00a0and\u00a0<strong>Stop VM in Azure<\/strong>\u00a0is always the same proxy server.<\/span><\/li>\n<li><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">The\u00a0<strong>Start VM in Azure<\/strong>\u00a0and\u00a0<strong>Stop VM in Azure<\/strong>\u00a0uses\u00a0<strong>Configuration Variables<\/strong>\u00a0to indicate which VM to start and stop.<\/span><\/li>\n<li><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">The\u00a0<strong>Stop VM in Azure<\/strong>\u00a0action (through its\u00a0<strong>Configuration Variables<\/strong>) always stops the previous stage&#8217;s VM. That is why it is turned off in stage\u00a0<strong>dev<\/strong>\u00a0(there is no previous stage). Stopping a VM in the next stage\u00a0will allow us to do the installation, then the required testing and turn it off once we deploy to next stage. Note that stopping the VM is optional since concurrent testing may be required on the different stages. It can also be managed manually.<\/span><\/li>\n<li><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">The\u00a0<strong>Start VM in Azure<\/strong>\u00a0action of stage prod absent as we assume this VM is never stopped.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-family: tahoma, arial, helvetica, sans-serif\">You are now ready to deploy automatically\u00a0to your Azure&#8217;s VM.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Visual Studio Release Management can be used to achieve continuous deployment\u00a0to\u00a0virtual machines in Windows Azure. When configured correctly, Release Management is able to deploy to a VM residing on the cloud just as easily as to a VM hosted locally. This article will explain the steps in order to start a VM on the cloud, [&hellip;]<\/p>\n","protected":false},"author":139,"featured_media":45953,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[226,1],"tags":[],"class_list":["post-1613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ci","category-devops"],"acf":[],"blog_post_summary":"<p>Visual Studio Release Management can be used to achieve continuous deployment\u00a0to\u00a0virtual machines in Windows Azure. When configured correctly, Release Management is able to deploy to a VM residing on the cloud just as easily as to a VM hosted locally. This article will explain the steps in order to start a VM on the cloud, [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/1613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/users\/139"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/comments?post=1613"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/posts\/1613\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media\/45953"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/media?parent=1613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/categories?post=1613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/devops\/wp-json\/wp\/v2\/tags?post=1613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}