{"id":74650,"date":"2018-09-21T09:38:44","date_gmt":"2018-09-21T16:38:44","guid":{"rendered":"https:\/\/open.microsoft.com\/?p=73969"},"modified":"2025-06-30T01:36:09","modified_gmt":"2025-06-30T08:36:09","slug":"tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/","title":{"rendered":"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)"},"content":{"rendered":"\n<p>In this blogpost, we will show you how to provision a Jenkins virtual machine and setup a CI\/CD pipeline to build an ASP.NET Core application stored in GitHub and deploy the application into Azure Kubernetes Service (AKS).<\/p>\n\n\n\n<p>We start from the solution template in Azure Marketplace since that\u2019s the fastest and easiest path to get Jenkins up and running in Azure. You can follow the steps using your existing Jenkins server, regardless of whether it\u2019s run on premises or in the cloud. The deployment target is Azure Kubernetes Service. It manages your hosted Kubernetes environment, making it quick and easy to deploy and manage containerized applications without container orchestration expertise. It also eliminates the burden of ongoing operations and maintenance by provisioning, upgrading, and scaling resources on demand, without taking your applications offline.<\/p>\n\n\n\n<p>This is the flow implemented in this post:<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1.webp\" alt=\"Workflow diagram: Dev commits code to Jenkins, Jenkins distributes to Azure Container Registry and Azure Kubernetes\" class=\"wp-image-74182 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1.webp 624w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1-300x134.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1-330x148.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1-400x179.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1.jpg\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1.jpg 624w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1-300x134.jpg 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1-330x148.jpg 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/image-1-1-400x179.jpg 400w\"><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Developers commit code change into GitHub<\/li>\n\n\n\n<li>Jenkins builds the application into a Docker image<\/li>\n\n\n\n<li>Jenkins pushes the Docker image into Azure Container Registry<\/li>\n\n\n\n<li>Jenkins deploys the Docker image into Azure Kubernetes Service<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"prerequisites\">Prerequisites<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/mjrousos\/AspNetCore-Sample\/tree\/master\/cicd\">Provision resources and do first time deployment<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"deploy-jenkins-server\"><a id=\"user-content-deploy-jenkins-server\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/Jenkins-AspnetCore-AKS.md#deploy-jenkins-server\"><\/a>Deploy Jenkins server<\/h3>\n\n\n\n<p>In the Azure portal, select&nbsp;<strong>Create a resource<\/strong>&nbsp;and search for&nbsp;<strong>Jenkins<\/strong>. Select the Jenkins offering with a publisher of&nbsp;<strong>Microsoft&nbsp;<\/strong>and select&nbsp;<strong>Create<\/strong>.<br>Enter the following information on the basics form and click&nbsp;<strong>OK<\/strong>&nbsp;when done.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name<\/strong>\u00a0&#8211; name for the Jenkins deployment.<\/li>\n\n\n\n<li><strong>User name<\/strong>\u00a0&#8211; this user name is used as the admin user for the Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>Authentication type<\/strong>\u00a0&#8211; SSH public key is recommended. If selected, copy in an SSH public key to be used when logging into the Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>Subscription<\/strong>\u00a0&#8211; select an Azure subscription.<\/li>\n\n\n\n<li><strong>Resource group<\/strong>\u00a0&#8211; create a new or select an existing resource group.<\/li>\n\n\n\n<li><strong>Location<\/strong>\u00a0&#8211; select a location for the Jenkins server.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-02.png\" alt=\"Screenshot 1 - Jenkins server config\" class=\"wp-image-73980\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>On the additional settings form, complete the following items:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Size<\/strong>\u00a0&#8211; Select the appropriate sizing option for your Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>VM disk type<\/strong>\u00a0&#8211; Specify either HDD (hard-disk drive) or SSD (solid-state drive) for the Jenkins server.<\/li>\n\n\n\n<li><strong>Virtual network<\/strong>\u00a0&#8211; (Optional) Select Virtual network to modify the default settings.<\/li>\n\n\n\n<li><strong>Subnets<\/strong>\u00a0&#8211; Select Subnets, verify the information, and select\u00a0<strong>OK<\/strong>.<\/li>\n\n\n\n<li><strong>Public IP address<\/strong>\u00a0&#8211; Selecting the Public IP address allows you to give it a custom name, configure SKU, and assignment method.<\/li>\n\n\n\n<li><strong>Domain name label<\/strong>\u00a0&#8211; Specify a value to create a fully qualified URL to the Jenkins virtual machine.<\/li>\n\n\n\n<li><strong>Jenkins release type<\/strong>\u00a0&#8211; Select the desired release type from the options: LTS, Weekly build, or Azure Verified.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-03-1.png\" alt=\"Screenshot 2 - Jenkins server config\" class=\"wp-image-73981\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>For Integration Settings, select&nbsp;<strong>No<\/strong>&nbsp;to use Jenkins host to build the jobs.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-04-2.png\" alt=\"Screenshot 3 - Jenkins server config\" class=\"wp-image-73986\" \/><\/figure>\n\n\n\n<p>If you want to use ACI or VM build agent, you can refer&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/container-instances\/container-instances-jenkins\" rel=\"nofollow\">https:\/\/docs.microsoft.com\/en-us\/azure\/container-instances\/container-instances-jenkins<\/a>&nbsp;&amp;&nbsp;<a href=\"https:\/\/wiki.jenkins.io\/display\/JENKINS\/Azure+VM+Agents+plugin\" rel=\"nofollow\">https:\/\/wiki.jenkins.io\/display\/JENKINS\/Azure+VM+Agents+plugin<\/a><\/p>\n\n\n\n<p>Once done with the integration settings, click&nbsp;<strong>OK<\/strong>, and then&nbsp;<strong>OK<\/strong>&nbsp;again on the validation summary. Click&nbsp;<strong>Create<\/strong>&nbsp;on the Terms of use summary. The Jenkins server takes a few minutes to deploy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"configure-jenkins\"><a id=\"user-content-configure-jenkins\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/Jenkins-AspnetCore-AKS.md#configure-jenkins\"><\/a>Configure Jenkins<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"get-initial-admin-password\"><a id=\"user-content-get-initial-admin-password\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/Jenkins-AspnetCore-AKS.md#get-initial-admin-password\"><\/a>Get initial admin password<\/h4>\n\n\n\n<p>In the Azure portal, browse to the Jenkins Resource Group, select the Jenkins virtual machine, and take note of the DNS name.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-fqdn-5.png\" alt=\"Screenshot 4 - Jenkins server config\" class=\"wp-image-73973\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Browser to the DNS name of the Jenkins VM and copy the returned SSH string.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1.webp\" alt=\"Screenshot 5 - Jenkins on Azure\" class=\"wp-image-74167 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1.webp 1014w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-300x241.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-768x617.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-311x250.webp 311w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-330x265.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-800x643.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-400x321.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1.png 1014w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-300x241.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-768x617.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-311x250.png 311w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-330x265.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-800x643.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-06-1-400x321.png 400w\"><\/figure>\n\n\n\n<p>Open up a terminal session on your development system, and paste in the SSH string from the last step. Update &#8216;username&#8217; to the username specified when deploying the Jenkins server.<br>Once connected, run the following command to retrieve the initial admin password.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo cat \/var\/lib\/jenkins\/secrets\/initialAdminPassword\n<\/pre><\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"deploy-secrets-into-azure-aks\"><a id=\"user-content-deploy-secrets-into-azure-aks\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/Jenkins-AspnetCore-AKS.md#deploy-secrets-into-azure-aks\"><\/a>Deploy secrets into Azure AKS<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/cli\/azure\/install-azure-cli-apt?view=azure-cli-latest\" rel=\"nofollow\">Install Azure CLI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.docker.com\/install\/linux\/docker-ce\/ubuntu\/\" rel=\"nofollow\">Install Docker<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/kubernetes.io\/docs\/tasks\/tools\/install-kubectl\/\" rel=\"nofollow\">Install kubectl<\/a><\/li>\n\n\n\n<li>Get AKS credentials<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\naz aks get-credentials --resource-group ${resource_group} --name ${aks_name} --admin\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy secret of Azure ACR<\/li>\n<\/ul>\n\n\n\n<p>(You can skip this step if you have already done it in first-time deployment)<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl create secret docker-registry regsecret --docker-server=${acr_server} --docker-username=${acr_username} --docker-password=${acr_password} --docker-email=${your_email}\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Deploy secret of Application Insights instrumentation key<\/li>\n<\/ul>\n\n\n\n<p>(You can skip this step if you have already done it in first-time deployment)<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nkubectl create secret generic aspnetcoredemo-secrets --from-literal=AppInsightsKey=${ai_key}\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Copy AKS credential to Jenkins folder<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo mkdir \/var\/lib\/jenkins\/.kube\nsudo cp .kube\/config \/var\/lib\/jenkins\/.kube\/\nsudo chmod 777 \/var\/lib\/jenkins\/.kube\/config\n<\/pre><\/div>\n\n\n<p>Leave the SSH session and tunnel running, and navigate to\u00a0<a href=\"http:\/\/localhost:8080\/\">http:\/\/localhost:8080<\/a>\u00a0in a browser. Paste the initial admin password into the field as seen in the following image. Select\u00a0<strong>Continue<\/strong>\u00a0when done.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-07-1.png\" alt=\"Screenshot 6 - Unlock Jenkins\" class=\"wp-image-73984\" \/><\/figure>\n\n\n\n<p>Select&nbsp;<strong>Install suggested plugins<\/strong>&nbsp;to install all recommended Jenkins plugins.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-08.png\" alt=\"Screenshot 7 - Customize Jenkins\" class=\"wp-image-73964\" \/><\/figure>\n\n\n\n<p>Create a new admin user account. This account is used for logging into and working with your Jenkins instance.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-portal-09.png\" alt=\"Screenshot 8 - Getting Started, Create First Admin User\" class=\"wp-image-73965\" \/><\/figure>\n\n\n\n<p>Select&nbsp;<strong>Save and Finish<\/strong>&nbsp;when done, and then&nbsp;<strong>Start using Jenkins<\/strong>&nbsp;to complete the configuration.<br>Jenkins is now configured and ready to build and deploy code. For this example, a simple asp.net core application is used to demonstrate a Jenkins build. It can be found at&nbsp;<a href=\"https:\/\/github.com\/mjrousos\/AspNetCore-Sample\">https:\/\/github.com\/mjrousos\/AspNetCore-Sample<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"create-pipeline-build-job-and-deploy-to-azure-aks\"><a id=\"user-content-create-pipeline-build-job-and-deploy-to-azure-aks\" class=\"anchor\" href=\"https:\/\/github.com\/xiangyan99\/JenkinsCiCD2Azure\/blob\/master\/Jenkins-AspnetCore-AKS.md#create-pipeline-build-job-and-deploy-to-azure-aks\"><\/a>Create Pipeline build job and deploy to Azure AKS<\/h3>\n\n\n\n<p>Now create a Jenkins build job. Select&nbsp;<strong>New Item<\/strong>, give the build project a name such as aspnetcore-webapp, select&nbsp;<strong>Pipeline<\/strong>, and click&nbsp;<strong>OK<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10.webp\" alt=\"Screenshot 9 - Create Pipeline build job\" class=\"wp-image-74155 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10.webp 944w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-300x266.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-768x682.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-282x250.webp 282w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-330x293.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-800x710.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-400x355.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10.png 944w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-300x266.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-768x682.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-282x250.png 282w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-330x293.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-800x710.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-new-job-aspnetcore-aks-10-400x355.png 400w\"><\/figure>\n\n\n\n<p>Define parameters &#8220;git_repo&#8221;, &#8220;acr_username&#8221;, &#8220;acr_password&#8221;, &#8220;registry_url&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-11.png\" alt=\"Screenshot 10 - Create Pipeline build job\" class=\"wp-image-73975\" \/><\/figure>\n\n\n\n<p>Under&nbsp;<strong>Pipeline<\/strong>, set&nbsp;<strong>Definition<\/strong>&nbsp;to&nbsp;<strong>Pipeline script from SCM<\/strong>,&nbsp;<strong>Repository URL<\/strong>&nbsp;to&nbsp;<a href=\"https:\/\/github.com\/mjrousos\/AspNetCore-Sample.git\">https:\/\/github.com\/mjrousos\/AspNetCore-Sample.git<\/a>&nbsp;and&nbsp;<strong>Script Path<\/strong>&nbsp;to cicd\/Jenkinsfile.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12.webp\" alt=\"Screenshot 11 - Create Pipeline build job\" class=\"wp-image-74146 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12.webp 946w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-300x277.webp 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-768x710.webp 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-271x250.webp 271w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-330x305.webp 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-800x739.webp 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-400x370.webp 400w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12.png 946w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-300x277.png 300w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-768x710.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-271x250.png 271w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-330x305.png 330w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-800x739.png 800w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-12-400x370.png 400w\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"run-the-build-job\">Run the build job<\/h3>\n\n\n\n<p>To test the build job, manually start a build.<br>Select Build Now to start a build job. It takes a few seconds for the job to start, when running, you should see status similar to the following images.<\/p>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13.webp\" alt=\"Screenshot 12 - Build History\" class=\"wp-image-74152 webp-format\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13.webp 332w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13-240x300.webp 240w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13-200x250.webp 200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13-280x350.webp 280w\" data-orig-src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13.png\" data-orig-srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13.png 332w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13-240x300.png 240w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13-200x250.png 200w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-status-13-280x350.png 280w\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"here-you-go\">Here you go&#8230;<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2018\/09\/jenkins-job-aspnetcore-aks-14-e1537549463723.png\" alt=\"Screenshot 13 - Deployed site\" class=\"wp-image-73977\" \/><\/figure>\n\n\n\n<p>Questions or feedback? Let us know in the comments below.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blogpost, we will show you how to provision a Jenkins virtual machine and setup a CI\/CD pipeline to build an ASP.NET Core application stored in GitHub and deploy the application into Azure Kubernetes Service (AKS).<\/p>\n","protected":false},"author":5562,"featured_media":95483,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[2272],"content-type":[340],"topic":[2241,2244],"programming-languages":[],"coauthors":[2353],"class_list":["post-74650","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-microsoft","content-type-tutorials-and-demos","topic-cloud","topic-devops","review-flag-1593580428-734","review-flag-1593580415-931","review-flag-1593580419-521","review-flag-1593580771-946","review-flag-new-1593580248-669","review-flag-on-pr-1593580826-861","review-flag-vm-1593580807-312"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)<\/title>\n<meta name=\"description\" content=\"In this tutorial, learn how to provision a Jenkins VM, setup a CI\/CD pipeline to build an application stored in GitHub, and deploy to Azure Kubernetes Service (AKS).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)\" \/>\n<meta property=\"og:description\" content=\"In this tutorial, learn how to provision a Jenkins VM, setup a CI\/CD pipeline to build an application stored in GitHub, and deploy to Azure Kubernetes Service (AKS).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-09-21T16:38:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-30T08:36:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Xiang Yan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Xiang Yan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/xiang-yan\/\",\"@type\":\"Person\",\"@name\":\"Xiang Yan\"}],\"headline\":\"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)\",\"datePublished\":\"2018-09-21T16:38:44+00:00\",\"dateModified\":\"2025-06-30T08:36:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\"},\"wordCount\":933,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp\",\"keywords\":[\"Microsoft\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\",\"name\":\"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp\",\"datePublished\":\"2018-09-21T16:38:44+00:00\",\"dateModified\":\"2025-06-30T08:36:09+00:00\",\"description\":\"In this tutorial, learn how to provision a Jenkins VM, setup a CI\/CD pipeline to build an application stored in GitHub, and deploy to Azure Kubernetes Service (AKS).\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp\",\"width\":1170,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)","description":"In this tutorial, learn how to provision a Jenkins VM, setup a CI\/CD pipeline to build an application stored in GitHub, and deploy to Azure Kubernetes Service (AKS).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)","og_description":"In this tutorial, learn how to provision a Jenkins VM, setup a CI\/CD pipeline to build an application stored in GitHub, and deploy to Azure Kubernetes Service (AKS).","og_url":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2018-09-21T16:38:44+00:00","article_modified_time":"2025-06-30T08:36:09+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.png","type":"image\/png"}],"author":"Xiang Yan","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Xiang Yan","Est. reading time":"4 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/xiang-yan\/","@type":"Person","@name":"Xiang Yan"}],"headline":"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)","datePublished":"2018-09-21T16:38:44+00:00","dateModified":"2025-06-30T08:36:09+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/"},"wordCount":933,"commentCount":0,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp","keywords":["Microsoft"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/","url":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/","name":"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp","datePublished":"2018-09-21T16:38:44+00:00","dateModified":"2025-06-30T08:36:09+00:00","description":"In this tutorial, learn how to provision a Jenkins VM, setup a CI\/CD pipeline to build an application stored in GitHub, and deploy to Azure Kubernetes Service (AKS).","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/SEC20_Security_042.webp","width":1170,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2018\/09\/21\/tutorial-jenkins-cicd-pipeline-deploy-application-azure-kubernetes-service\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Jenkins CI\/CD to deploy an ASP.NET Core application to Azure Kubernetes Service (AKS)"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/74650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/5562"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=74650"}],"version-history":[{"count":5,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/74650\/revisions"}],"predecessor-version":[{"id":97863,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/74650\/revisions\/97863"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95483"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=74650"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=74650"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=74650"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=74650"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=74650"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=74650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}