{"id":85473,"date":"2019-10-24T19:02:19","date_gmt":"2019-10-24T19:02:19","guid":{"rendered":"https:\/\/www.red-gate.com\/simple-talk\/?p=85473"},"modified":"2022-04-24T20:52:48","modified_gmt":"2022-04-24T20:52:48","slug":"configure-ci-cd-azure-devops","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/devops\/tools\/configure-ci-cd-azure-devops\/","title":{"rendered":"How to Configure CI\/CD in Azure DevOps"},"content":{"rendered":"<p>One of the goals of DevOps is to provide faster and reliable releases. In this regard, the terms Continuous Integration and Continuous Deployment have become very popular. Continuous Integration (CI) is a software development practice that requires developers working on the project to integrate code into a shared repository. For the CI process to be a success, the build, unit tests, integration tests, acceptance tests should be successful. This article explains\u00a0 how to configure CI\/CD in Azure DevOps.<\/p>\n<p>Continuous Delivery (CD) is an extension of CI that enables you to ship software faster, continuously. Continuous Delivery is achieved through Continuous Testing. Automated testing is integrated with the CI\/CD pipeline. This ensures that all changes flowing through the pipeline are validated. Here&#8217;s the entire CI\/CD workflow in a step by step manner.<\/p>\n<ol>\n<li>The developer checks in the source code to the code repository<\/li>\n<li>The build process is triggered<\/li>\n<li>All automated tests (unit tests, acceptance tests) are run<\/li>\n<li>If any of the tests fail, the build process terminates abruptly<\/li>\n<li>The release process is only triggered if the build process is successful<\/li>\n<li>If a release is successful, the application is deployed<\/li>\n<\/ol>\n<p>This article presents a discussion on how CI\/CD can be configured in Azure DevOps.<\/p>\n<h2>The Goals<\/h2>\n<p>In this post, I will show you how to:<\/p>\n<ol>\n<li>Create an Azure DevOps Project\n<ol style=\"list-style-type: lower-alpha;\">\n<li>Edit a build pipeline (this pipeline will be created automatically)<\/li>\n<li>Edit a release pipeline (this pipeline will be created automatically)<\/li>\n<\/ol>\n<\/li>\n<li>Clone the Code Repository<\/li>\n<li>Explore the CI\/CD pipelines<\/li>\n<li>Trigger the CI\/CD process<\/li>\n<\/ol>\n<h2>The Prerequisites<\/h2>\n<p>In this article, you\u2019ll be using Visual Studio 2019 and .NET Core.<\/p>\n<p>If you don\u2019t have Visual Studio 2019 installed in your system, you can get a copy from <a href=\"https:\/\/visualstudio.microsoft.com\/downloads\/\">here<\/a>. If you don\u2019t have .NET Core installed in your system, you can download a copy from <a href=\"https:\/\/dotnet.microsoft.com\/download\/archives\">here<\/a>. You should also have an Azure account. You can create an Azure account for free. If you don&#8217;t have an Azure account, you can create one from <a href=\"https:\/\/azure.microsoft.com\/en-us\/\">here.<\/a><\/p>\n<h2>Creating an Azure DevOps Project<\/h2>\n<p>Azure DevOps Project facilitates an easy setup of the continuous integration (CI) and continuous delivery (CD) pipeline in Azure. You can use your existing code or use the example code from the sample application that is created by default when you create a new Azure DevOps Project in Azure.<\/p>\n<p>To create a new Azure DevOps project, follow the steps outlined below:<\/p>\n<ol>\n<li>Select the <em>+ Create Resource<\/em> icon in the left navigation bar (refer to Figure 1)<\/li>\n<li>Select <em>DevOps<\/em> from the Azure Marketplace<\/li>\n<li>Click on <em>DevOps Project<\/em> in the list<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1229\" height=\"989\" class=\"wp-image-85474\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati.png\" \/><\/p>\n<p class=\"caption\">Figure 1: The Azure DevOps Marketplace<\/p>\n<ol start=\"4\">\n<li>In the next screen, select <em>.NET<\/em> shown in Figure 2 and click <em>Next.<\/em><\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1599\" height=\"855\" class=\"wp-image-85475\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a.png\" \/><\/p>\n<p class=\"caption\">Figure 2: Choose the technology to be used<\/p>\n<ol start=\"5\">\n<li>In the next screen, select <em>ASP.NET Core<\/em> as the application framework, as shown in Figure 3. Since this example does not use a database, you can ignore the <em>Add a database <\/em>option for now.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1604\" height=\"884\" class=\"wp-image-85476\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati-1.png\" \/><\/p>\n<p class=\"caption\">Figure 3: Choose the application framework to be used<\/p>\n<ol start=\"6\">\n<li>Click <em>Next<\/em><\/li>\n<\/ol>\n<p>You can deploy your application to Virtual Machines, Windows App Service, Azure Kubernetes Services (AKS), Azure SQL Database, and Azure Service Fabric. In this example, you&#8217;ll deploy the sample application to Windows App Service.<\/p>\n<ol start=\"7\">\n<li>Specify <em>Windows Web App<\/em> as the type of the Azure service to be used, as shown in Figure 4.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1569\" height=\"893\" class=\"wp-image-85477\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-1.png\" \/><\/p>\n<p class=\"caption\">Figure 4: Select the Azure service to deploy the application<\/p>\n<ol start=\"8\">\n<li>Click <em>Next<\/em><\/li>\n<li>In the next screen, specify the project name and the name of the Azure DevOps organization, as shown in Figure 5.<\/li>\n<li>Select the Subscription you would like to use<\/li>\n<li>Fill in a <em>Web app name<\/em>. Note that the name must be unique across Azure.<\/li>\n<li>Select your <em>Location<\/em>.<\/li>\n<\/ol>\n<p>Note that you can change the default pricing tier being used by clicking on <em>Additional settings<\/em> and selecting the <em>Pricing Tier<\/em> from the drop-down control. The screen should look similar to Figure 5.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1535\" height=\"893\" class=\"wp-image-85478\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-2.png\" \/><\/p>\n<p class=\"caption\">Figure 5: Specify the basic details<\/p>\n<ol start=\"13\">\n<li>Click <em>Done<\/em> to complete the process<\/li>\n<li>Once the deployment is complete, click <em>Go to resource<\/em> to view it.<\/li>\n<\/ol>\n<p>A new DevOps project will be created. Figure 6 shows how the Azure DevOps project dashboard looks. Note that you will have to wait several minutes for the <em>Build<\/em> process to complete, and until then the <em>Azure resources<\/em> details will not be filled in.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1916\" height=\"936\" class=\"wp-image-85479\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica.png\" \/><\/p>\n<p class=\"caption\">Figure 6: The Azure DevOps Dashboard<\/p>\n<p>Click <em>Browse<\/em> (refer to Figure 6) to view your application in the web browser. Figure 7 below shows how your application should look in the web browser.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1875\" height=\"973\" class=\"wp-image-85480\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-3.png\" \/><\/p>\n<p class=\"caption\">Figure 7: The Web Application in execution!<\/p>\n<h2>Cloning the Code Repository<\/h2>\n<p>In the <em>Azure DevOps<\/em> project dashboard (refer to Figure 6), click on the name of your application under <em>Code<\/em>. Figure 8 shows the code repository in the web browser. Click <em>Clone<\/em> and then copy the <em>Clone URL<\/em> as shown in Figure 8 and proceed to the next step.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1915\" height=\"801\" class=\"wp-image-85481\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-4.png\" \/><\/p>\n<p class=\"caption\">Figure 8: Clone the repository<\/p>\n<p>Now follow the steps given below to clone the repository in Visual Studio 2019.<\/p>\n<ol>\n<li>Open the Visual Studio 2019 IDE<\/li>\n<li>Click <em>Continue without code<\/em> as shown in Figure 9 below<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"349\" class=\"wp-image-85482\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/word-image-72.png\" \/><\/p>\n<p class=\"caption\">Figure 9: Continue without code<\/p>\n<ol start=\"3\">\n<li>In the Visual Studio 2019 IDE, click on <em>View Team Explorer<\/em> from the menu.<\/li>\n<li>Click <em>Clone<\/em> in the <em>Team Explorer<\/em> window.<\/li>\n<li>Specify the <em>Clone URL<\/em> and the path to the local folder where the repository will be cloned like Figure 10.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"562\" class=\"wp-image-85483\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati-2.png\" \/><\/p>\n<p class=\"caption\">Figure 10: The Team Explorer<\/p>\n<ol start=\"6\">\n<li>Click <em>Clone<\/em> to start the process<\/li>\n<\/ol>\n<p>Once the repository has been successfully cloned, you can view the source code in the <em>Solution Explorer<\/em>. You can even make changes to the code if needed. Note that once you commit these changes to the code repository, the build process will be automatically triggered. After switching to the <em>Solution<\/em> view, the project should look similar to Figure 11.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"915\" class=\"wp-image-85484\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati-3.png\" \/><\/p>\n<p class=\"caption\">Figure 11: Solution Explorer<\/p>\n<h2>Examining the CI\/CD Pipelines<\/h2>\n<p>A full CI\/CD pipeline will be automatically configured for you. You can explore the pipeline and even customize it if need be. At the top of the Azure DevOps project dashboard, you&#8217;ll see menu options for both <em>Build<\/em> <em>pipelines<\/em> and <em>Release<\/em> <em>pipelines<\/em> as shown in Figure 12.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1359\" height=\"699\" class=\"wp-image-85485\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati-4.png\" \/><\/p>\n<p class=\"caption\">Figure 12: The build and release pipelines<\/p>\n<h3>Build Pipelines<\/h3>\n<p>Click <em>Build pipelines<\/em> to load the build pipeline(s) for your application in the web browser, as shown in Figure 13 and then click <em>Edit<\/em>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1917\" height=\"501\" class=\"wp-image-85486\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-5.png\" \/><\/p>\n<p class=\"caption\">Figure 13: Edit the build pipeline<\/p>\n<p>The build pipeline performs the following tasks.<\/p>\n<ul>\n<li>Retrieves source code from the code repository<\/li>\n<li>Restores the project&#8217;s dependencies<\/li>\n<li>Builds the application<\/li>\n<li>Runs all the automated tests<\/li>\n<li>Publishes the outputs<\/li>\n<\/ul>\n<p>Figure 14 illustrates the various tasks performed by your build pipeline.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1919\" height=\"903\" class=\"wp-image-85487\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica-1.png\" \/><\/p>\n<p class=\"caption\">Figure 14: Tasks performed by the build pipeline<\/p>\n<p>If you click on the <em>History<\/em> tab, you&#8217;ll be able to see a history of the changes for the build. When you click on the <em>Triggers<\/em> tab, you&#8217;ll be able to see the triggers that have been configured for the build as shown in Figure 15. The Azure DevOps project created CI triggers by default when you created the project.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1919\" height=\"755\" class=\"wp-image-85488\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica-2.png\" \/><\/p>\n<p class=\"caption\">Figure 15: CI Triggers<\/p>\n<p>Optionally, include or exclude branches from the build pipeline. Note that the <em>Enable continuous integration<\/em> checkbox is checked. This would ensure that for every commit to the repository, a new build will be initiated.<\/p>\n<h3>Release Pipelines<\/h3>\n<p>Click <em>Release pipelines<\/em> in the Azure DevOps project dashboard to load the release pipelines for your application in the web browser, as shown in Figure 16 below.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1915\" height=\"767\" class=\"wp-image-85489\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-6.png\" \/><\/p>\n<p class=\"caption\">Figure 16: Edit the release pipeline<\/p>\n<p>Click <em>Edit<\/em> to edit the release pipeline. Figure 17 illustrates the release pipeline in edit mode.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1914\" height=\"813\" class=\"wp-image-85490\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati-5.png\" \/><\/p>\n<p class=\"caption\">Figure 17: Release pipeline in edit mode<\/p>\n<p>Select <em>Drop<\/em> from the <em>Artifacts<\/em> option. Click on the icon to the top-right corner of the <em>Drop<\/em> icon to view the continuous deployment trigger shown in Figure 18 that has been configured for the application.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"261\" class=\"wp-image-85491\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/word-image-73.png\" \/><\/p>\n<p class=\"caption\">Figure 18: View continuous deployment trigger<\/p>\n<p>Note that the continuous deployment trigger creates a release whenever a new build is available. When you click on <em>Tasks<\/em>, you&#8217;ll be able to see all the tasks and activities that your release pipeline executes, as shown in Figure 19.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1919\" height=\"819\" class=\"wp-image-85492\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-7.png\" \/><\/p>\n<p class=\"caption\">Figure 19: Tasks and activities<\/p>\n<p>To see a list of all the releases, you can click on View releases as shown in Figure 19.<\/p>\n<h2>Triggering the CI\/CD Process<\/h2>\n<p>There are two ways (automatic and manual) in which the CI\/CD process can be triggered. The build process will be triggered automatically once you make changes in the source code and commit those changes to the code repository. It is during this phase that the tests are run automatically. If any of the tests fail or the compilation process is not successful, the build fails. If the build is not successful, the release process is not triggered.<\/p>\n<p>An alternative to this is by triggering the build process manually. To do this, first, select the <em>Builds<\/em> section and click on the <em>Queue<\/em> button, as shown in Figure 20. When you do this, a new build will be queued up.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1914\" height=\"809\" class=\"wp-image-85493\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-8.png\" \/><\/p>\n<p class=\"caption\">Figure 20: Queue the build<\/p>\n<p>In the next screen, click on <em>Run<\/em> (see Figure 21) to trigger the build process manually.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1603\" height=\"943\" class=\"wp-image-85494\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica-3.png\" \/><\/p>\n<p class=\"caption\">Figure 21: Run the build pipeline<\/p>\n<p>This will trigger the build process, as shown in Figure 22.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1591\" height=\"943\" class=\"wp-image-85495\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-cell-phone-description-automati-6.png\" \/><\/p>\n<p class=\"caption\">Figure 22: Build process started<\/p>\n<p>Like the build, you can also trigger a release process manually. To do this, switch to <em>Releases<\/em> and click on <em>Create<\/em> release, as shown in Figure 23.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1919\" height=\"821\" class=\"wp-image-85496\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica-4.png\" \/><\/p>\n<p class=\"caption\">Figure 23: Trigger the release process<\/p>\n<p>In the <em>Create a new release<\/em> screen shown in Figure 24, specify the build definition you would use to generate the release.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-85497\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica-5.png\" alt=\"create a new release\" width=\"1593\" height=\"941\" \/><\/p>\n<p class=\"caption\">Figure 24: Specify the build<\/p>\n<p>Click <em>Create<\/em> to start the release process.<\/p>\n<h2>Re-triggering the CI\/CD Process<\/h2>\n<p>Now it\u2019s time to change the source code and see how this change flows through the pipeline. To do this, follow the steps outlined below.<\/p>\n<ol>\n<li>Double-click the <em>Index.cshtml<\/em> file to open it. Add a line of text, as shown in Figure 25 below.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1154\" height=\"661\" class=\"wp-image-85498\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-9.png\" \/><\/p>\n<p class=\"caption\">Figure 25: Adding a line of code<\/p>\n<ol start=\"2\">\n<li>Right-click on the solution in the Solution Explorer window and click <em>Commit&#8230;<\/em> to check-in the code.<\/li>\n<li>Specify a comment as a reason for the commit and click on <em>Commit All<\/em>.<\/li>\n<li>Click <em>Sync<\/em> to synchronize the changes with the server.<\/li>\n<li>Finally, click <em>Push<\/em> to send the changes from the local repository to the remote repository<\/li>\n<li>The build process starts automatically, as shown in Figure 26.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1593\" height=\"491\" class=\"wp-image-85499\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-10.png\" \/><\/p>\n<p class=\"caption\">Figure 26: The build process starts<\/p>\n<p>Once the build process is successfully completed, the release process starts automatically as shown in Figure 27 below.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-85500\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-social-media-post-description-a-11.png\" alt=\"Configure CI\/CD in Azure DevOps the release process\" width=\"1595\" height=\"561\" \/><\/p>\n<p class=\"caption\">Figure 27: The release process<\/p>\n<p>After successful completion of the release process, the application is re-deployed to the same application endpoint, i.e., <a href=\"https:\/\/cicdazuredemo.azurewebsites.net\">https:\/\/cicdazuredemo.azurewebsites.net<\/a>. (Your URL will be different since the application names must be unique across Azure.)<\/p>\n<p>When you browse this endpoint in the web browser, here\u2019s how the output will look. Note the text <em>This is a test message<\/em> as shown in Figure 28.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-85501\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/2019\/10\/a-screenshot-of-a-computer-description-automatica-6.png\" alt=\"Configure CI\/CD in Azure DevOps\" width=\"1891\" height=\"867\" \/><\/p>\n<p class=\"caption\">Figure 28: The output with the change<\/p>\n<h2>Configure CI\/CD in Azure DevOps<\/h2>\n<p>Continuous Integration and Continuous Delivery together can help your organization build great software with faster time to market releases. You can take advantage of CI\/CD to automate your builds and deployments and be more productive. Both CI and CD help in automating the software delivery process. It should be noted that CI can happen several times a day &#8211; it all depends on the number of times the source code is committed.<\/p>\n<p><em>If you liked this article, you might also like<\/em>\u00a0<a href=\"https:\/\/www.red-gate.com\/simple-talk\/sysadmin\/devops\/getting-started-with-azure-devops\/\">Azure DevOps: Getting started &#8211; Simple Talk (red-gate.com)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Joydip Kanjilal shows you how to configure CI\/CD in Azure DevOps using a .NET Core app. Continuously build, test, and deploy. &hellip;<\/p>\n","protected":false},"author":221905,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143538,137091,143521],"tags":[95506,136300,136299,136301],"coauthors":[50381],"class_list":["post-85473","post","type-post","status-publish","format-standard","hentry","category-dotnet-development","category-azure","category-tools","tag-automate","tag-azure-devops","tag-ci-cd","tag-devops-pipeline"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/85473","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/221905"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=85473"}],"version-history":[{"count":11,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/85473\/revisions"}],"predecessor-version":[{"id":89651,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/85473\/revisions\/89651"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=85473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=85473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=85473"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=85473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}