{"componentChunkName":"component---src-templates-tags-js","path":"/tags/VSTS/","result":{"data":{"allMarkdownRemark":{"totalCount":2,"edges":[{"node":{"id":"f9ff0245-c07a-563a-8cf3-e72f29d0cffb","html":"<p><a href=\"/2017-04-27-vsts-cicd-angularcli-aspnetcore/\">In my previous post</a> I showed you how to setup a build pipeline for a SPA application written in <a href=\"https://angular.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Angular</a> using <a href=\"https://github.com/angular/angular-cli\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Angular CLI</a> and <a href=\"https://docs.microsoft.com/en-us/aspnet/core/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ASP.Net Core</a> as back-end. I promised back then to continue with the release as well, but have been pretty busy lately.</p>\n<!--more-->\n<p>Now is the time to pay my debt and show you how you will get the release done to make it a proper continuous delivery right from when you commit the code to when it is deployed to production.</p>\n<p>We will be using <a href=\"https://azure.microsoft.com/en-au/services/app-service/web/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Azure Web Apps</a> for our deployment purposes but it really doesn’t matter where you deploy it since there are many third party tools covering different providers like <a href=\"https://aws.amazon.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">AWS</a>.</p>\n<h1 id=\"create-the-release-definition\" style=\"position:relative;\"><a href=\"#create-the-release-definition\" aria-label=\"create the release definition permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create the release definition</h1>\n<p>You can create a release in VSTS in two easy ways, either click on the release tab and create a new release definition:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 697px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/e0966127d4b79a70a80508b7349181a6/7422e/release-from-release-page.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 33.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABaElEQVR42nWOPU/CUBiFO7q4GBV1NjgYf4Yx8Tc4uehqHGXAEBxMnPwJOpiQ6CBRYsRvMCZAQCxI+WwDlLZIe3tpb28/7rWB6GI8OTl5n+U9h5neOJ7aPlvajS3uxGa2Tic3T+bC78GjxnyUm41wC1EucFAP7udXQ8m1yMt6+H5lLx2IVidCn8uHLJNIFy7iqfPLVPK1eJ2t3eRq8UzjjhVvP8R4lk8U2lc5wcc3Ts43lExVfq4oT9zggRs8lnsMlkQxk1NLrCcKRJU80HexaSNom9A2ADaAgyAlDqUepe44yQgRMhhZ6JS7OvIodglyCJZl13V1CIGuKxr80vThcOh6hFD66xFREyGm3+JLZb5YbhXYJltpy7UGxpZhGLZty9CGyEWmYVkWIcT7kf/dR9M0GaDIfYFXBF5qNf3D1FTbcTDG9H+RUTPym3lBqNbrY3d7UrvTAQCoqqppGoTQT78B/ZG/BQDwDRqkaZzbFvGkAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Release from release page\"\n        title=\"\"\n        src=\"/static/e0966127d4b79a70a80508b7349181a6/7422e/release-from-release-page.png\"\n        srcset=\"/static/e0966127d4b79a70a80508b7349181a6/01bf6/release-from-release-page.png 270w,\n/static/e0966127d4b79a70a80508b7349181a6/07484/release-from-release-page.png 540w,\n/static/e0966127d4b79a70a80508b7349181a6/7422e/release-from-release-page.png 697w\"\n        sizes=\"(max-width: 697px) 100vw, 697px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>or if you have a successful build click on the release button next to it and it will then brings you to the same page but automatically links it to the build definition’s output artefact:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 697px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/2f8ccc44816c40f94cb01f101199f7a3/7422e/release-from-build-summary.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 22.962962962962965%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAIAAADKYVtkAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABDElEQVR42i2Iu07DMBRA83tIMNM8xHd0qrqXX6BTGxUCxOkKyoKAAZhoMlEioZZSJbZjx3aeTnAK9x4d3Xu0fVbHXFJepBjjFMdJzDlv21bKprfag9X8H61s6kpWZScbDWOSIIwgooTSlAoqRCaKvCxrmWeCU64o8gImkBEmWM4REetPuo6azUYb3Y/OHyZjfzx5nAzvhrqjm45pXVvW7ZnpGMZVj3oHi4F+qRuOaSwGxvRYvzg5nR5p/oc/e5vNn+buq2s/2/aL7YUeCABYue676wXeMlyCFVDlr7uqBx4IvZsQaG3RRrto+7WFOxh/x+gH0YSSmChnMGOIoV1fGGTpPs1J3lVdVxyoul+PQPRJdY2jzwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Release from build summary\"\n        title=\"\"\n        src=\"/static/2f8ccc44816c40f94cb01f101199f7a3/7422e/release-from-build-summary.png\"\n        srcset=\"/static/2f8ccc44816c40f94cb01f101199f7a3/01bf6/release-from-build-summary.png 270w,\n/static/2f8ccc44816c40f94cb01f101199f7a3/07484/release-from-build-summary.png 540w,\n/static/2f8ccc44816c40f94cb01f101199f7a3/7422e/release-from-build-summary.png 697w\"\n        sizes=\"(max-width: 697px) 100vw, 697px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>The easiest way to create the release definition is based on a template. The best template for our purpose is <strong>Azure App Service Deployment</strong>, which is very straightforward to use. When you click on create new release definition you will see below pop up:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/efac25cf62a8c937e82d0c9d7dfd66a7/90683/vststemplate.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 39.25925925925926%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFwABAAMAAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAd6AsD//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAEFAn//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAY/An//xAAYEAACAwAAAAAAAAAAAAAAAAAAARAhgf/aAAgBAQABPyHBu4//2gAMAwEAAgADAAAAEPPP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGBABAQEBAQAAAAAAAAAAAAAAAQARIUH/2gAIAQEAAT8QT00yHNl//9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"New release definition\"\n        title=\"\"\n        src=\"/static/efac25cf62a8c937e82d0c9d7dfd66a7/47311/vststemplate.jpg\"\n        srcset=\"/static/efac25cf62a8c937e82d0c9d7dfd66a7/6f81f/vststemplate.jpg 270w,\n/static/efac25cf62a8c937e82d0c9d7dfd66a7/09d21/vststemplate.jpg 540w,\n/static/efac25cf62a8c937e82d0c9d7dfd66a7/47311/vststemplate.jpg 1080w,\n/static/efac25cf62a8c937e82d0c9d7dfd66a7/0047d/vststemplate.jpg 1620w,\n/static/efac25cf62a8c937e82d0c9d7dfd66a7/274e1/vststemplate.jpg 2160w,\n/static/efac25cf62a8c937e82d0c9d7dfd66a7/90683/vststemplate.jpg 2842w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Select the first option and you will be asked to enter a name for the environment you are deploying to:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/d9488ae3e64a38eaf4e8b24c26a9d3e2/d35b7/vstsenvironment.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 45.92592592592593%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMCBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe7qdAD/xAAWEAEBAQAAAAAAAAAAAAAAAAAQATH/2gAIAQEAAQUCZp//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAXEAADAQAAAAAAAAAAAAAAAAABECGx/9oACAEBAAE/IQa9H//aAAwDAQACAAMAAAAQsw//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAaEAACAgMAAAAAAAAAAAAAAAAAIQFREDFB/9oACAEBAAE/EJk2rFYsjsn/2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"VSTS environment\"\n        title=\"\"\n        src=\"/static/d9488ae3e64a38eaf4e8b24c26a9d3e2/47311/vstsenvironment.jpg\"\n        srcset=\"/static/d9488ae3e64a38eaf4e8b24c26a9d3e2/6f81f/vstsenvironment.jpg 270w,\n/static/d9488ae3e64a38eaf4e8b24c26a9d3e2/09d21/vstsenvironment.jpg 540w,\n/static/d9488ae3e64a38eaf4e8b24c26a9d3e2/47311/vstsenvironment.jpg 1080w,\n/static/d9488ae3e64a38eaf4e8b24c26a9d3e2/d35b7/vstsenvironment.jpg 1374w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Enter the name and close the panel by clicking on the <code class=\"language-text\">x</code> mark (there is no save button here).</p>\n<h2 id=\"linking-the-build-artefact\" style=\"position:relative;\"><a href=\"#linking-the-build-artefact\" aria-label=\"linking the build artefact permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Linking the build artefact</h2>\n<p>Now it is time to add the build artefact to the release. Click on add artefact button and you will see below pop up:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/85981ee3cf691972874e244c0d32e65b/77607/vstsartifact.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 56.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIBAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB3R60cgX/xAAYEAACAwAAAAAAAAAAAAAAAAAAAREgQf/aAAgBAQABBQKFTT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAXEAADAQAAAAAAAAAAAAAAAAABECAx/9oACAEBAAY/Asgr/8QAGRAAAQUAAAAAAAAAAAAAAAAAIQABESBh/9oACAEBAAE/IcCggNW//9oADAMBAAIAAwAAABDfD//EABURAQEAAAAAAAAAAAAAAAAAABAx/9oACAEDAQE/EIf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhMRBBkeH/2gAIAQEAAT8QPkEEM0OqhjbfFqStAVTAxt9n/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"VSTS artefact\"\n        title=\"\"\n        src=\"/static/85981ee3cf691972874e244c0d32e65b/47311/vstsartifact.jpg\"\n        srcset=\"/static/85981ee3cf691972874e244c0d32e65b/6f81f/vstsartifact.jpg 270w,\n/static/85981ee3cf691972874e244c0d32e65b/09d21/vstsartifact.jpg 540w,\n/static/85981ee3cf691972874e244c0d32e65b/47311/vstsartifact.jpg 1080w,\n/static/85981ee3cf691972874e244c0d32e65b/0047d/vstsartifact.jpg 1620w,\n/static/85981ee3cf691972874e244c0d32e65b/274e1/vstsartifact.jpg 2160w,\n/static/85981ee3cf691972874e244c0d32e65b/77607/vstsartifact.jpg 2885w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Select the project and the list of builds will be populated with all the available builds. Select the one you are after and select latest as the version. Then give it a source alias (this is an identifier - typically a short name - that uniquely identifies an artefact linked to a a release definition). Now select add and that’s it we have linked the build output to the release.</p>\n<h2 id=\"setting-the-deployment-condition\" style=\"position:relative;\"><a href=\"#setting-the-deployment-condition\" aria-label=\"setting the deployment condition permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setting the deployment condition</h2>\n<p>Now it is time to set the deployment condition, I will use automatic deployment which is turned off by default. Click on the little trigger button on top of the artefact:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/0b7e2dacc12229adfc69851ecb1865b0/04254/cdtriggervsts.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 20.740740740740744%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAEABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB34FB/8QAFRABAQAAAAAAAAAAAAAAAAAAAEH/2gAIAQEAAQUCV//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEABj8Cf//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEAAT8hX//aAAwDAQACAAMAAAAQA8//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAXEAADAQAAAAAAAAAAAAAAAAAAEBGB/9oACAEBAAE/ECXC/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Trigger VSTS\"\n        title=\"\"\n        src=\"/static/0b7e2dacc12229adfc69851ecb1865b0/47311/cdtriggervsts.jpg\"\n        srcset=\"/static/0b7e2dacc12229adfc69851ecb1865b0/6f81f/cdtriggervsts.jpg 270w,\n/static/0b7e2dacc12229adfc69851ecb1865b0/09d21/cdtriggervsts.jpg 540w,\n/static/0b7e2dacc12229adfc69851ecb1865b0/47311/cdtriggervsts.jpg 1080w,\n/static/0b7e2dacc12229adfc69851ecb1865b0/0047d/cdtriggervsts.jpg 1620w,\n/static/0b7e2dacc12229adfc69851ecb1865b0/274e1/cdtriggervsts.jpg 2160w,\n/static/0b7e2dacc12229adfc69851ecb1865b0/04254/cdtriggervsts.jpg 2756w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Click on enable to for continuous deployment. Add the source branch (master, prod, etc.) which means it will only trigger the release if the source branch is the one you select here. Close the panel and we’re done in this section.</p>\n<h2 id=\"release-tasks\" style=\"position:relative;\"><a href=\"#release-tasks\" aria-label=\"release tasks permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Release tasks</h2>\n<p>Before we continue with the release tasks you will need to have the following:</p>\n<ol>\n<li>An instance of Azure Web Apps (refer <a href=\"http://www.c-sharpcorner.com/blogs/stepbystep-guide-to-creating-a-web-app-on-azure-portal\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here to learn how to create one using portal</a> or <a href=\"https://azure.microsoft.com/en-us/get-started/web-app/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here to learn how to create and deploy using Visual Studio</a>)</li>\n<li>A service endpoint defined and liked to your Azure Subscription. Refer <a href=\"https://docs.microsoft.com/en-us/vsts/build-release/concepts/library/service-endpoints\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">here for a comprehensive list of endpoints</a> and how to create them.</li>\n</ol>\n<p>Now click on the tasks tab and in the environment panel select the service endpoint mentioned above in the Azure Subscription box:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/5f403af4fb854e5dc1d9e67c18eab896/df937/releaseenv.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 45.55555555555556%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe23Qg//xAAWEAEBAQAAAAAAAAAAAAAAAAAiACD/2gAIAQEAAQUCUs//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAWEAEBAQAAAAAAAAAAAAAAAABBACD/2gAIAQEABj8CIz//xAAaEAACAgMAAAAAAAAAAAAAAAAAARAhMVGR/9oACAEBAAE/IcqC3XbhQz//2gAMAwEAAgADAAAAEPAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHBAAAwABBQAAAAAAAAAAAAAAAAExERBBccHR/9oACAEBAAE/EKTzu3kbqfAb4KelH//Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Release environment\"\n        title=\"\"\n        src=\"/static/5f403af4fb854e5dc1d9e67c18eab896/47311/releaseenv.jpg\"\n        srcset=\"/static/5f403af4fb854e5dc1d9e67c18eab896/6f81f/releaseenv.jpg 270w,\n/static/5f403af4fb854e5dc1d9e67c18eab896/09d21/releaseenv.jpg 540w,\n/static/5f403af4fb854e5dc1d9e67c18eab896/47311/releaseenv.jpg 1080w,\n/static/5f403af4fb854e5dc1d9e67c18eab896/0047d/releaseenv.jpg 1620w,\n/static/5f403af4fb854e5dc1d9e67c18eab896/df937/releaseenv.jpg 1705w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Then select Web App from the app type drop down and select the web app you created from step one above.</p>\n<div class=\"custom-block info\"><div class=\"custom-block-body\"><strong>Note:</strong> Run on agent in this page uses <code class=\"language-text\">VS2017</code> hosted agent, if you want to use a Linux host you will need to change the settings yourself.</div></div>\n<p>Now click on the <code class=\"language-text\">Deploy Azure App Service</code> task to see the details on the right hand side panel. We will leave the version on this page to remain on <code class=\"language-text\">3.*</code> which now supports <code class=\"language-text\">Supports File Transformations (XDT)</code> and <code class=\"language-text\">Supports Variable Substitutions(XML, JSON)</code> but if you want to use an older version you can do that.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/beb00992201773483211c32951572198/d9c39/releasetask.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 50.37037037037037%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe21SoP/xAAXEAADAQAAAAAAAAAAAAAAAAAAAREg/9oACAEBAAEFAqK5/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGBAAAgMAAAAAAAAAAAAAAAAAAAEgMUH/2gAIAQEABj8Cpmx//8QAGxAAAQQDAAAAAAAAAAAAAAAAAQAQESFBgaH/2gAIAQEAAT8hJXyRysbwwy//2gAMAwEAAgADAAAAEAAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHBABAAIBBQAAAAAAAAAAAAAAAQARMUFxgZHR/9oACAEBAAE/EKQHyXT2GowdSK6ZxM90uDP/2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"VSTS release task\"\n        title=\"\"\n        src=\"/static/beb00992201773483211c32951572198/47311/releasetask.jpg\"\n        srcset=\"/static/beb00992201773483211c32951572198/6f81f/releasetask.jpg 270w,\n/static/beb00992201773483211c32951572198/09d21/releasetask.jpg 540w,\n/static/beb00992201773483211c32951572198/47311/releasetask.jpg 1080w,\n/static/beb00992201773483211c32951572198/0047d/releasetask.jpg 1620w,\n/static/beb00992201773483211c32951572198/d9c39/releasetask.jpg 1800w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Based on what you’ve selected in the environment section from previous steps, the next three fields will be pre-filled for you.</p>\n<p>The next important thing to consider is when you have set up an staging slot for your web app and want to deploy to it first and do some verification before deploying to production which is a logical precaution. If so tick the deploy to staging box.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/a3fe4b4216f4c58067809bba760b7e8c/0993a/taskcontinue.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 49.62962962962963%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3amgD//EABUQAQEAAAAAAAAAAAAAAAAAABAB/9oACAEBAAEFAmP/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAVEAEBAAAAAAAAAAAAAAAAAAABIP/aAAgBAQABPyEaf//aAAwDAQACAAMAAAAQUM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAaEAACAgMAAAAAAAAAAAAAAAAAARARITGB/9oACAEBAAE/EHJ0qMnTef/Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"VSTS release task\"\n        title=\"\"\n        src=\"/static/a3fe4b4216f4c58067809bba760b7e8c/47311/taskcontinue.jpg\"\n        srcset=\"/static/a3fe4b4216f4c58067809bba760b7e8c/6f81f/taskcontinue.jpg 270w,\n/static/a3fe4b4216f4c58067809bba760b7e8c/09d21/taskcontinue.jpg 540w,\n/static/a3fe4b4216f4c58067809bba760b7e8c/47311/taskcontinue.jpg 1080w,\n/static/a3fe4b4216f4c58067809bba760b7e8c/0047d/taskcontinue.jpg 1620w,\n/static/a3fe4b4216f4c58067809bba760b7e8c/0993a/taskcontinue.jpg 1783w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>You can leave the package folder intact if the build output is created on the default working folder.</p>\n<p>Select the take app offline if you haven’t selected the deploy to slot option (since users might experience some unexpected behaviour if they are using the application).</p>\n<p>And at last if you want to use web deploy for reasons like having a dependency on it, you will need to tick publish using web deploy and that’s it.</p>\n<p>Click save and queue release if you already have a successful build and there you go, end to end from commit to deployment to the target environment.</p>\n<p>Hope this helps you to have a seamless experience using <a href=\"https://www.visualstudio.com/team-services/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Visual Studio Team Services</a> features for CI/CD.</p>","timeToRead":3,"frontmatter":{"title":"Setting up VSTS CI/CD for a SPA app using AngularCLI, ASPNetCore (Part 2)","unformattedDate":"2017-12-18T00:00:00.000Z","date":"Dec 18, 2017","path":"setting-up-vsts-ci-cd-for-a-spa-app-using-angularcli-aspnetcore-part-2/","author":"Yaser Adel Mehraban","tags":["angular","aspnetcore","CI/CI","visual studio","VSTS"],"thumbnail":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","placeholder":{"fallback":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABAABAv/EABcBAAMBAAAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAXt70o8ieX//xAAaEAACAgMAAAAAAAAAAAAAAAACAwABICIj/9oACAEBAAEFAgBlN2nXD//EABcRAAMBAAAAAAAAAAAAAAAAAAACEmH/2gAIAQMBAT8BZqJ0/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQIBAT8BV//EABoQAAEFAQAAAAAAAAAAAAAAABEQICExQnH/2gAIAQEABj8Ck9Npln//xAAbEAACAgMBAAAAAAAAAAAAAAABEQAhIFFh8P/aAAgBAQABPyF5JQ2VNILFgcnm8P/aAAwDAQACAAMAAAAQoz//xAAXEQEBAQEAAAAAAAAAAAAAAAABABFx/9oACAEDAQE/EEWt2v/EABcRAAMBAAAAAAAAAAAAAAAAAAABIXH/2gAIAQIBAT8QUMo//8QAHhAAAgEDBQAAAAAAAAAAAAAAAREAITFBEFFxodH/2gAIAQEAAT8QEHubgJaJ4p3DF8BsdvYE3cmiZ1//2Q=="},"backgroundColor":"transparent","images":{"fallback":{"src":"/static/fb4319d21614a974df93be566aac2446/351b6/vstsazure.jpg","srcSet":"/static/fb4319d21614a974df93be566aac2446/37781/vstsazure.jpg 750w,\n/static/fb4319d21614a974df93be566aac2446/351b6/vstsazure.jpg 800w","sizes":"(min-width: 800px) 800px, 100vw"},"sources":[{"srcSet":"/static/fb4319d21614a974df93be566aac2446/0f892/vstsazure.webp 750w,\n/static/fb4319d21614a974df93be566aac2446/1b807/vstsazure.webp 800w","type":"image/webp","sizes":"(min-width: 800px) 800px, 100vw"}]},"width":800,"height":348}}}}}},{"node":{"id":"467edae9-dac5-51be-a369-328074ecbddb","html":"<p>Recently I was assigned to a green field project where we had to create an initial structure of a project which was going to be written in <a href=\"https://angular.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Angular 2</a> using <a href=\"https://github.com/angular/angular-cli\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Angular CLI</a> for front end side and ASP.Net Core for back-end.</p>\n<!--more-->\n<p>We had to use <a href=\"https://www.visualstudio.com/team-services/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">VSTS</a> (Visual Studio Team Services) as our source control and build and deployment pipeline. The result was then deployed to <a href=\"https://azure.microsoft.com/en-au/services/app-service/web/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Azure Web Apps</a> and the aim was to make this happen.</p>\n<p>After some digging and trying the new version of <a href=\"https://www.visualstudio.com/vs/whatsnew/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Visual Studio 2017</a> and setting the initial build steps, I found out that VSTS does not support the <code class=\"language-text\">csproj</code> files yet. Therefore, I had to go back and use visual studio 2015 with <code class=\"language-text\">project.json</code> file.</p>\n<p>On the other hand since we were using Angular CLI we couldn’t merge it easily in one project with our ASP.Net Core project since it hides the actual webpack config file.</p>\n<p>At least it wasn’t something we could do quickly and we had to prepare a <a href=\"https://en.wikipedia.org/wiki/Proof_of_concept\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">POC</a> to get a taste of what was going to happen in the product.</p>\n<p>So I started googling and found a good <a href=\"http://asp.net-hacker.rocks/2016/09/19/aspnetcore-and-angular2-using-dotnetcli-and-vscode.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">article</a> from <strong>Jürgen Gutsch</strong> showing how to simply merge them using two different projects and a simple front end build before building the web app.</p>\n<p>I won’t go into too much details here, but basically you would build the Angular project and modify the config to write the output files into <code class=\"language-text\">wwwroot</code> folder. Yes I know, simple.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 200px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/3cac19ec7e7b41ec7f240e5035a0f79b/e07e9/simples.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 101%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAQDAgX/xAAYAQACAwAAAAAAAAAAAAAAAAABAwACBP/aAAwDAQACEAMQAAAB8+vCqGV2bmk0GNxFh//EABwQAAICAgMAAAAAAAAAAAAAAAIRAAEDEBIhIv/aAAgBAQABBQKvMBmR12KIcPEZltmNqPX/xAAXEQADAQAAAAAAAAAAAAAAAAAAAREQ/9oACAEDAQE/AVILf//EABkRAAIDAQAAAAAAAAAAAAAAAAACARARMf/aAAgBAgEBPwF90XhNf//EABsQAAICAwEAAAAAAAAAAAAAAAARAQIQEjEy/9oACAEBAAY/AmhRWJrjVoWwzh5jH//EABwQAQADAAIDAAAAAAAAAAAAAAEAESExcRBBgf/aAAgBAQABPyFJBZX2RheDmpWMrOIxuwv7CLZZO+EsOHuJyh8f/9oADAMBAAIAAwAAABBgCAD/xAAXEQEBAQEAAAAAAAAAAAAAAAABEQAQ/9oACAEDAQE/EKRlSmOf/8QAGBEBAAMBAAAAAAAAAAAAAAAAAQAQETH/2gAIAQIBAT8QIexuZ1X/xAAcEAEBAAIDAQEAAAAAAAAAAAABEQAhMUFxEJH/2gAIAQEAAT8QF3KWgGbAEoafcK+7bHDXHvqB0Bw5GlSwZ3hAE5NeuUCNJDTCg0F0PP78/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"simples\"\n        title=\"\"\n        src=\"/static/3cac19ec7e7b41ec7f240e5035a0f79b/e07e9/simples.jpg\"\n        srcset=\"/static/3cac19ec7e7b41ec7f240e5035a0f79b/e07e9/simples.jpg 200w\"\n        sizes=\"(max-width: 200px) 100vw, 200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>By now your project structure may be looking like this:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 919px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/57613e5a904cd18d5c8a55b6a5cd8e7f/4d723/project.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 73.7037037037037%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAUBBP/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAGn0zqCaD//xAAaEAEAAwADAAAAAAAAAAAAAAABAAIRBBIi/9oACAEBAAEFAtNydY8RbhYPU//EABURAQEAAAAAAAAAAAAAAAAAAAAR/9oACAEDAQE/AVf/xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQIBAT8BiY//xAAdEAABAwUBAAAAAAAAAAAAAAABAAIxEBMhYZGS/9oACAEBAAY/Apb6qXXTnSkcUji//8QAGxAAAwACAwAAAAAAAAAAAAAAAAERMWGRwfD/2gAIAQEAAT8hakS3WBLMvkjZEA9AiK0E9XZ//9oADAMBAAIAAwAAABCsL//EABcRAAMBAAAAAAAAAAAAAAAAAAABEVH/2gAIAQMBAT8QrKw//8QAFxEBAAMAAAAAAAAAAAAAAAAAABFhcf/aAAgBAgEBPxCNMn//xAAdEAACAgEFAAAAAAAAAAAAAAABEQAhQTFxgZHx/9oACAEBAAE/EBsoaNgbCGAWPIZwmOs5rwVVvq5XfAGSZXM9ZH//2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Project Structure\"\n        title=\"\"\n        src=\"/static/57613e5a904cd18d5c8a55b6a5cd8e7f/4d723/project.jpg\"\n        srcset=\"/static/57613e5a904cd18d5c8a55b6a5cd8e7f/6f81f/project.jpg 270w,\n/static/57613e5a904cd18d5c8a55b6a5cd8e7f/09d21/project.jpg 540w,\n/static/57613e5a904cd18d5c8a55b6a5cd8e7f/4d723/project.jpg 919w\"\n        sizes=\"(max-width: 919px) 100vw, 919px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>That done, I started to setup the VSTS build steps. Well that is very straight forward, you just have to give the steps the right order so start by create an empty build.</p>\n<p><strong>1. Get the source code</strong></p>\n<p>The very first step is to get the source from source control. Define your repository and the branch you are working on.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/1379ac9db0a62c0ab66d56a6f5fdb697/907fc/getsource.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.11111111111111%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAG6AD//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAEFAn//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAQ/9oACAEBAAY/An//xAAYEAACAwAAAAAAAAAAAAAAAAAAEQEQIf/aAAgBAQABPyFKDa//2gAMAwEAAgADAAAAEIPP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGRABAQEAAwAAAAAAAAAAAAAAAREAQZGh/9oACAEBAAE/EFo3zBJZcDy9b//Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Get Source\"\n        title=\"\"\n        src=\"/static/1379ac9db0a62c0ab66d56a6f5fdb697/47311/getsource.jpg\"\n        srcset=\"/static/1379ac9db0a62c0ab66d56a6f5fdb697/6f81f/getsource.jpg 270w,\n/static/1379ac9db0a62c0ab66d56a6f5fdb697/09d21/getsource.jpg 540w,\n/static/1379ac9db0a62c0ab66d56a6f5fdb697/47311/getsource.jpg 1080w,\n/static/1379ac9db0a62c0ab66d56a6f5fdb697/0047d/getsource.jpg 1620w,\n/static/1379ac9db0a62c0ab66d56a6f5fdb697/274e1/getsource.jpg 2160w,\n/static/1379ac9db0a62c0ab66d56a6f5fdb697/907fc/getsource.jpg 2571w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>2. Restore dot net packages</strong></p>\n<p>Add a command line task and name it restore (you can call it something else this is just to make each step clear). Then type <code class=\"language-text\">dotnet</code> in the tool text box and <code class=\"language-text\">restore</code> in the arguments.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/8f8658a58b44c8d17dd9f673a4f36f99/11e85/restore.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 34.81481481481482%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAHABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3aAH/8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQABBQJ//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQAGPwJ//8QAFxAAAwEAAAAAAAAAAAAAAAAAARARQf/aAAgBAQABPyGGY//aAAwDAQACAAMAAAAQAA//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAZEAEAAgMAAAAAAAAAAAAAAAABABEhMYH/2gAIAQEAAT8QAugazUNTrP/Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Restore Packages\"\n        title=\"\"\n        src=\"/static/8f8658a58b44c8d17dd9f673a4f36f99/47311/restore.jpg\"\n        srcset=\"/static/8f8658a58b44c8d17dd9f673a4f36f99/6f81f/restore.jpg 270w,\n/static/8f8658a58b44c8d17dd9f673a4f36f99/09d21/restore.jpg 540w,\n/static/8f8658a58b44c8d17dd9f673a4f36f99/47311/restore.jpg 1080w,\n/static/8f8658a58b44c8d17dd9f673a4f36f99/0047d/restore.jpg 1620w,\n/static/8f8658a58b44c8d17dd9f673a4f36f99/274e1/restore.jpg 2160w,\n/static/8f8658a58b44c8d17dd9f673a4f36f99/11e85/restore.jpg 2533w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>3. Versioning if intended</strong></p>\n<p>If you care about versioning this is the time for it. What we chose to follow was <a href=\"http://semver.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">SemVer</a> so we put the major and minor numbers in <code class=\"language-text\">project.json</code> and got the rest from date and revision.</p>\n<p>Then all we had to do was to create a <code class=\"language-text\">PowerShell</code> script which extracted those and put them together to form the complete version and set it in <code class=\"language-text\">project.json</code> and <code class=\"language-text\">AssemblyInfo</code> files.</p>\n<p>The <code class=\"language-text\">PowerShell</code> script would as simple as:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"32854390095898900000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`Write-Output &quot;Getting version from Build number&quot;\r\n\r\n\\$jsonpath = &quot;\\$Env:WebSourceFolder\\project.json&quot;\r\n\\$json = Get-Content -Path \\$jsonpath -Raw | ConvertFrom-Json -ErrorAction Ignore\r\n\r\n\\$BuildVersion = [regex]::matches(\\$Env:BUILD_BUILDNUMBER, &quot;\\d+\\.\\d+&quot;)\r\n\r\nWrite-Output &quot;Build Version extracted =&gt; \\$BuildVersion&quot;\r\n\r\n\\$Version = \\$json.version + &quot;.&quot; + \\$BuildVersion\r\n\r\nWrite-Output &quot;App Version constructed =&gt; \\$Version&quot;\r\n\r\n\\$json.version = \\$Version\r\n\r\n\\$json | ConvertTo-Json -depth 100 | Out-File \\$jsonpath\r\n\r\nWrite-Output &quot;Applied Version&quot;</pre>`, `32854390095898900000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-powershell line-numbers\"><code class=\"language-powershell\"><span class=\"token function\">Write-Output</span> <span class=\"token string\">\"Getting version from Build number\"</span>\r\n\r\n<span class=\"token variable\">$jsonpath</span> = <span class=\"token string\">\"<span class=\"token variable\">$Env</span>:WebSourceFolder\\project.json\"</span>\r\n<span class=\"token variable\">$json</span> = <span class=\"token function\">Get-Content</span> <span class=\"token operator\">-</span>Path <span class=\"token variable\">$jsonpath</span> <span class=\"token operator\">-</span>Raw <span class=\"token punctuation\">|</span> <span class=\"token function\">ConvertFrom-Json</span> <span class=\"token operator\">-</span>ErrorAction Ignore\r\n\r\n<span class=\"token variable\">$BuildVersion</span> = <span class=\"token namespace\">[regex]</span>::matches<span class=\"token punctuation\">(</span><span class=\"token variable\">$Env</span>:BUILD_BUILDNUMBER<span class=\"token punctuation\">,</span> <span class=\"token string\">\"\\d+\\.\\d+\"</span><span class=\"token punctuation\">)</span>\r\n\r\n<span class=\"token function\">Write-Output</span> <span class=\"token string\">\"Build Version extracted =&amp;gt; <span class=\"token variable\">$BuildVersion</span>\"</span>\r\n\r\n<span class=\"token variable\">$Version</span> = <span class=\"token variable\">$json</span><span class=\"token punctuation\">.</span>version <span class=\"token operator\">+</span> <span class=\"token string\">\".\"</span> <span class=\"token operator\">+</span> <span class=\"token variable\">$BuildVersion</span>\r\n\r\n<span class=\"token function\">Write-Output</span> <span class=\"token string\">\"App Version constructed =&amp;gt; <span class=\"token variable\">$Version</span>\"</span>\r\n\r\n<span class=\"token variable\">$json</span><span class=\"token punctuation\">.</span>version = <span class=\"token variable\">$Version</span>\r\n\r\n<span class=\"token variable\">$json</span> <span class=\"token punctuation\">|</span> <span class=\"token function\">ConvertTo-Json</span> <span class=\"token operator\">-</span>depth 100 <span class=\"token punctuation\">|</span> <span class=\"token function\">Out-File</span> <span class=\"token variable\">$jsonpath</span>\r\n\r\n<span class=\"token function\">Write-Output</span> <span class=\"token string\">\"Applied Version\"</span>&lt;<span class=\"token operator\">/</span>pre></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre></div>\n<p><strong>4. Run the versioning script in build</strong></p>\n<p>As you can see we are extracting the major and minor from <code class=\"language-text\">project.json</code> and date and revision from build number. In order to set that in the first place you need to define the build output format as follow in the options tab of the build:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"46451720633396980000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied to clipboard ✅\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$(BuildDefinitionName)_\\$(Year:yy)\\$(DayOfYear)\\$(rev:.rr)`, `46451720633396980000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                Copy<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre style=\"counter-reset: linenumber NaN\" class=\"language-powershell line-numbers\"><code class=\"language-powershell\">$<span class=\"token punctuation\">(</span>BuildDefinitionName<span class=\"token punctuation\">)</span>_$<span class=\"token punctuation\">(</span>Year:yy<span class=\"token punctuation\">)</span>$<span class=\"token punctuation\">(</span>DayOfYear<span class=\"token punctuation\">)</span>$<span class=\"token punctuation\">(</span>rev:<span class=\"token punctuation\">.</span>rr<span class=\"token punctuation\">)</span></code><span aria-hidden=\"true\" class=\"line-numbers-rows\" style=\"white-space: normal; width: auto; left: 0;\"><span></span></span></pre></div>\n<p>Now you can create a <code class=\"language-text\">PowerShell</code> task and run this script and name it versioning. Leave the type to “File Path” and write the script path inside its box.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/9312a7cd03cf2c6e68f6a7c38badcb20/f642c/version.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.48148148148149%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAEF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3aAH/8QAFRABAQAAAAAAAAAAAAAAAAAAEEH/2gAIAQEAAQUCh//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEABj8Cf//EABcQAAMBAAAAAAAAAAAAAAAAAAEQITH/2gAIAQEAAT8huhX/AP/aAAwDAQACAAMAAAAQAA//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAbEAACAgMBAAAAAAAAAAAAAAAAAREhMUFxgf/aAAgBAQABPxBJaChcMWN+kdP/2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Versioning\"\n        title=\"\"\n        src=\"/static/9312a7cd03cf2c6e68f6a7c38badcb20/47311/version.jpg\"\n        srcset=\"/static/9312a7cd03cf2c6e68f6a7c38badcb20/6f81f/version.jpg 270w,\n/static/9312a7cd03cf2c6e68f6a7c38badcb20/09d21/version.jpg 540w,\n/static/9312a7cd03cf2c6e68f6a7c38badcb20/47311/version.jpg 1080w,\n/static/9312a7cd03cf2c6e68f6a7c38badcb20/0047d/version.jpg 1620w,\n/static/9312a7cd03cf2c6e68f6a7c38badcb20/274e1/version.jpg 2160w,\n/static/9312a7cd03cf2c6e68f6a7c38badcb20/f642c/version.jpg 2521w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>5. Building the solution</strong></p>\n<p>Time to build the solution. Create a “Visual Studio Build” task and write the solution file’s path (leave it as default which usually works), then <code class=\"language-text\">$(BuildPlatform)</code> in the platform box. Don’t forget to change the Visual Studio version to 2015, otherwise your build will fail.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/761f5a4d558b5dec3d82bfb8595aff01/3c389/build.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAMABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe5qwA//xAAVEAEBAAAAAAAAAAAAAAAAAAAgQf/aAAgBAQABBQKH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAGRAAAgMBAAAAAAAAAAAAAAAAARAAETFB/9oACAEBAAE/IR1VFnIMX//aAAwDAQACAAMAAAAQgA//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAcEAEAAgEFAAAAAAAAAAAAAAABABEhEDFRcYH/2gAIAQEAAT8QY2LgqBgtns3+pmNP/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Building Solution\"\n        title=\"\"\n        src=\"/static/761f5a4d558b5dec3d82bfb8595aff01/47311/build.jpg\"\n        srcset=\"/static/761f5a4d558b5dec3d82bfb8595aff01/6f81f/build.jpg 270w,\n/static/761f5a4d558b5dec3d82bfb8595aff01/09d21/build.jpg 540w,\n/static/761f5a4d558b5dec3d82bfb8595aff01/47311/build.jpg 1080w,\n/static/761f5a4d558b5dec3d82bfb8595aff01/0047d/build.jpg 1620w,\n/static/761f5a4d558b5dec3d82bfb8595aff01/274e1/build.jpg 2160w,\n/static/761f5a4d558b5dec3d82bfb8595aff01/3c389/build.jpg 2540w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>6. Installing npm packages</strong></p>\n<p>Ok we’re now done with server side steps apart from any possible tests. Time to build our client side app for which first you should restore all of <code class=\"language-text\">npm</code> packages.</p>\n<p>You can do this by creating a <code class=\"language-text\">npm</code> task which by default it will be prepared for install so leave the defaults as is. If there are any changes in future and you don’t see the command, just type <code class=\"language-text\">install</code> in the npm command box.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/9401bc4e657c5b9cb8a97ebbae591ce5/03e07/npminstall.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 44.074074074074076%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAdynIwD/xAAVEAEBAAAAAAAAAAAAAAAAAAAgQf/aAAgBAQABBQKH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAFxAAAwEAAAAAAAAAAAAAAAAAARAxkf/aAAgBAQABPyEaZj//2gAMAwEAAgADAAAAEJAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHBABAAIBBQAAAAAAAAAAAAAAAQARMRAhQWGR/9oACAEBAAE/EGJUpHBA2ldvsywwaf/Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"NPM Install\"\n        title=\"\"\n        src=\"/static/9401bc4e657c5b9cb8a97ebbae591ce5/47311/npminstall.jpg\"\n        srcset=\"/static/9401bc4e657c5b9cb8a97ebbae591ce5/6f81f/npminstall.jpg 270w,\n/static/9401bc4e657c5b9cb8a97ebbae591ce5/09d21/npminstall.jpg 540w,\n/static/9401bc4e657c5b9cb8a97ebbae591ce5/47311/npminstall.jpg 1080w,\n/static/9401bc4e657c5b9cb8a97ebbae591ce5/0047d/npminstall.jpg 1620w,\n/static/9401bc4e657c5b9cb8a97ebbae591ce5/274e1/npminstall.jpg 2160w,\n/static/9401bc4e657c5b9cb8a97ebbae591ce5/03e07/npminstall.jpg 2539w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>7. Run JS tests</strong></p>\n<p>If you have any JS tests this is the time to run them. By default the <code class=\"language-text\">Angular CLI</code> is setup in a way that the tests can be executed using <code class=\"language-text\">npm test</code> command. So create another <code class=\"language-text\">npm</code> task and call it “run js tests”.</p>\n<p>The only thing to remember is that you have to set the working folder (I am using build variables but you can fully type that) correct, this is where you specify your Angular project root folder. Now the only thing left is to write <code class=\"language-text\">test</code> in the command box.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/e6859e6e51c001926b952b863d1175a3/5deef/jstests.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.48148148148149%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3KAD/8QAFhAAAwAAAAAAAAAAAAAAAAAAARAx/9oACAEBAAEFAhF//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAEP/aAAgBAQAGPwJ//8QAFxAAAwEAAAAAAAAAAAAAAAAAARARYf/aAAgBAQABPyErp//aAAwDAQACAAMAAAAQgA//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAZEAEAAgMAAAAAAAAAAAAAAAABABEhQWH/2gAIAQEAAT8QAVoRqBgldZ//2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"JS Tests\"\n        title=\"\"\n        src=\"/static/e6859e6e51c001926b952b863d1175a3/47311/jstests.jpg\"\n        srcset=\"/static/e6859e6e51c001926b952b863d1175a3/6f81f/jstests.jpg 270w,\n/static/e6859e6e51c001926b952b863d1175a3/09d21/jstests.jpg 540w,\n/static/e6859e6e51c001926b952b863d1175a3/47311/jstests.jpg 1080w,\n/static/e6859e6e51c001926b952b863d1175a3/0047d/jstests.jpg 1620w,\n/static/e6859e6e51c001926b952b863d1175a3/274e1/jstests.jpg 2160w,\n/static/e6859e6e51c001926b952b863d1175a3/5deef/jstests.jpg 2517w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>8. Build the client application</strong></p>\n<p>Time has come to build the Angular project. This can be done by running another <code class=\"language-text\">npm</code> task. You just have to make sure that you have already defined the <code class=\"language-text\">ng</code> command to run <code class=\"language-text\">Angular CLI</code>.</p>\n<p>All you need to do now is to type <code class=\"language-text\">run</code> as command and then “ng build” as argument. This step is the key since it will build the client project, bundle everything and copy them into <code class=\"language-text\">wwwroot</code> folder of the web project.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/bc0233c8264116276683aa2c0a0b6158/5e845/buildjs.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 41.48148148148149%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAIABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAIF/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAAB3KAD/8QAFRABAQAAAAAAAAAAAAAAAAAAEEH/2gAIAQEAAQUCh//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABQQAQAAAAAAAAAAAAAAAAAAABD/2gAIAQEABj8Cf//EABYQAAMAAAAAAAAAAAAAAAAAAAEQkf/aAAgBAQABPyEW/wD/2gAMAwEAAgADAAAAEAAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGBABAAMBAAAAAAAAAAAAAAAAAQARMYH/2gAIAQEAAT8QZRUsbkMnWf/Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"NPM build\"\n        title=\"\"\n        src=\"/static/bc0233c8264116276683aa2c0a0b6158/47311/buildjs.jpg\"\n        srcset=\"/static/bc0233c8264116276683aa2c0a0b6158/6f81f/buildjs.jpg 270w,\n/static/bc0233c8264116276683aa2c0a0b6158/09d21/buildjs.jpg 540w,\n/static/bc0233c8264116276683aa2c0a0b6158/47311/buildjs.jpg 1080w,\n/static/bc0233c8264116276683aa2c0a0b6158/0047d/buildjs.jpg 1620w,\n/static/bc0233c8264116276683aa2c0a0b6158/274e1/buildjs.jpg 2160w,\n/static/bc0233c8264116276683aa2c0a0b6158/5e845/buildjs.jpg 2535w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>9. Run server side tests</strong></p>\n<p>Almost there. This is the time to run your server side tests. You can do that by creating a Visual Studio Test task. Default values will suffice unless you might want to customise them.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/8200743d4967e6e26b4c624ea138d467/e46e4/webtests.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 51.85185185185185%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMBBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe6nQ0H/xAAWEAEBAQAAAAAAAAAAAAAAAAABEDH/2gAIAQEAAQUCMhf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAYEAADAQEAAAAAAAAAAAAAAAAAARAxQf/aAAgBAQABPyHqKNgp/9oADAMBAAIAAwAAABBwD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABsQAQACAwEBAAAAAAAAAAAAAAERMQAQIUFR/9oACAEBAAE/EOggFPMoTem4lj5lNf/Z'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Server Side Tests\"\n        title=\"\"\n        src=\"/static/8200743d4967e6e26b4c624ea138d467/47311/webtests.jpg\"\n        srcset=\"/static/8200743d4967e6e26b4c624ea138d467/6f81f/webtests.jpg 270w,\n/static/8200743d4967e6e26b4c624ea138d467/09d21/webtests.jpg 540w,\n/static/8200743d4967e6e26b4c624ea138d467/47311/webtests.jpg 1080w,\n/static/8200743d4967e6e26b4c624ea138d467/0047d/webtests.jpg 1620w,\n/static/8200743d4967e6e26b4c624ea138d467/274e1/webtests.jpg 2160w,\n/static/8200743d4967e6e26b4c624ea138d467/e46e4/webtests.jpg 2538w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>10. Publish the web project</strong></p>\n<p>Although these steps might seems a lot to do, they are pretty straight forward. Time to pack and create a publish artifact. First you will need to run <code class=\"language-text\">dotnet publish</code> from root of your ASP.Net Core app.</p>\n<p>To do this you need a command line task. You can pass your build configuration and publish directory to this command as well. I’ve done this as build variables.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/a60f7857686582761cca2d390a7e3154/9a38d/publish.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.96296296296297%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAECAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB3SFiIYv/xAAWEAEBAQAAAAAAAAAAAAAAAAAQAUH/2gAIAQEAAQUCwj//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAVEAEBAAAAAAAAAAAAAAAAAAAQAf/aAAgBAQAGPwJj/8QAFRABAQAAAAAAAAAAAAAAAAAAARD/2gAIAQEAAT8hpNf/2gAMAwEAAgADAAAAEG8P/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFREBAQAAAAAAAAAAAAAAAAAAARD/2gAIAQIBAT8QZ//EAB0QAQABAwUAAAAAAAAAAAAAAAEAEBExIUFRgZH/2gAIAQEAAT8QwXDvBOWdscBbia+V/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Publish\"\n        title=\"\"\n        src=\"/static/a60f7857686582761cca2d390a7e3154/47311/publish.jpg\"\n        srcset=\"/static/a60f7857686582761cca2d390a7e3154/6f81f/publish.jpg 270w,\n/static/a60f7857686582761cca2d390a7e3154/09d21/publish.jpg 540w,\n/static/a60f7857686582761cca2d390a7e3154/47311/publish.jpg 1080w,\n/static/a60f7857686582761cca2d390a7e3154/0047d/publish.jpg 1620w,\n/static/a60f7857686582761cca2d390a7e3154/274e1/publish.jpg 2160w,\n/static/a60f7857686582761cca2d390a7e3154/9a38d/publish.jpg 2541w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>11. Archive the published output</strong></p>\n<p>The only remaining steps are archive the files and drop them in a folder so you can use it in release. For archive there is already a predefined task called <code class=\"language-text\">Archive Files</code>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/59bb5944b7332470dbd87b7b04e445b0/3c389/archive.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.222222222222214%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAECAwX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHuPOyhB//EABcQAQADAAAAAAAAAAAAAAAAABABMUH/2gAIAQEAAQUCwij/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAYEAADAQEAAAAAAAAAAAAAAAAAARAxkf/aAAgBAQABPyFdimIp/9oADAMBAAIAAwAAABDgz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EABwQAQABBAMAAAAAAAAAAAAAAAEAEBEhMUFRkf/aAAgBAQABPxDEu7N8zTIk9iQRbdR0/9k='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Archive artifact output\"\n        title=\"\"\n        src=\"/static/59bb5944b7332470dbd87b7b04e445b0/47311/archive.jpg\"\n        srcset=\"/static/59bb5944b7332470dbd87b7b04e445b0/6f81f/archive.jpg 270w,\n/static/59bb5944b7332470dbd87b7b04e445b0/09d21/archive.jpg 540w,\n/static/59bb5944b7332470dbd87b7b04e445b0/47311/archive.jpg 1080w,\n/static/59bb5944b7332470dbd87b7b04e445b0/0047d/archive.jpg 1620w,\n/static/59bb5944b7332470dbd87b7b04e445b0/274e1/archive.jpg 2160w,\n/static/59bb5944b7332470dbd87b7b04e445b0/3c389/archive.jpg 2540w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p><strong>12. Publish the archived file</strong></p>\n<p>And at last you need to publish this artifact. Create a task called <code class=\"language-text\">Publish Artifact</code> and add drop to its name (for clarity). Then type your archive directory and name into correspondent boxes.</p>\n<p>You will need to set the artifact type to <code class=\"language-text\">Server</code> which means it copies the file to the same build server.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1080px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/8794e08d253629504f6146c4955129fc/67a70/drop.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.222222222222214%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAECAwX/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAHuTTQA/8QAFhABAQEAAAAAAAAAAAAAAAAAARAx/9oACAEBAAEFAjIX/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFBABAAAAAAAAAAAAAAAAAAAAIP/aAAgBAQAGPwJf/8QAFxAAAwEAAAAAAAAAAAAAAAAAAAEQwf/aAAgBAQABPyEVNX//2gAMAwEAAgADAAAAEOAP/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHRAAAgIBBQAAAAAAAAAAAAAAAREAIRAxQXGRof/aAAgBAQABPxBFILK1cZWPYue4RoMrZn//2Q=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Drop\"\n        title=\"\"\n        src=\"/static/8794e08d253629504f6146c4955129fc/47311/drop.jpg\"\n        srcset=\"/static/8794e08d253629504f6146c4955129fc/6f81f/drop.jpg 270w,\n/static/8794e08d253629504f6146c4955129fc/09d21/drop.jpg 540w,\n/static/8794e08d253629504f6146c4955129fc/47311/drop.jpg 1080w,\n/static/8794e08d253629504f6146c4955129fc/0047d/drop.jpg 1620w,\n/static/8794e08d253629504f6146c4955129fc/274e1/drop.jpg 2160w,\n/static/8794e08d253629504f6146c4955129fc/67a70/drop.jpg 2565w\"\n        sizes=\"(max-width: 1080px) 100vw, 1080px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n  </a>\n    </span></p>\n<p>Done. Now you can proceed with creating the release. I will explain that in my next post so keep an eye out.</p>\n<p>Also any comment or improvements are very appreciated.</p>","timeToRead":4,"frontmatter":{"title":"Setting up VSTS CI/CD for a SPA app using AngularCLI, ASPNetCore (Part 1)","unformattedDate":"2017-04-27T00:00:00.000Z","date":"Apr 27, 2017","path":"vsts-cicd-angularcli-aspnetcore","author":"Yaser Adel Mehraban","tags":["angular 2","angular cli","aspnetcore","CI/CI","VSTS"],"thumbnail":null}}}]}},"pageContext":{"tag":"VSTS"}},"staticQueryHashes":[],"slicesMap":{}}