{"id":175,"date":"2020-02-24T06:33:00","date_gmt":"2020-02-24T06:33:00","guid":{"rendered":"https:\/\/blogs.zeiss.com\/intern\/tech\/?p=175"},"modified":"2020-08-31T11:21:13","modified_gmt":"2020-08-31T11:21:13","slug":"ms-azure-devops-on-demand-agents","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/","title":{"rendered":"MS Azure DevOps: On-Demand Agents"},"content":{"rendered":"\n<p><em>This post is the first in a two-part series.<\/em><br><br>In today\u2019s DevOps world, Continuous Integration and Continuous  Delivery allow software engineers to deliver values to customers rapidly. We as <a href=\"https:\/\/www.zeiss.com\/corporate\/int\/innovation-and-technology\/digital-innovation-partners.html\">Digital Innovation Partners<\/a> at Zeiss use <a href=\"https:\/\/azure.microsoft.com\/en-in\/services\/devops\/\">Azure DevOps<\/a> extensively to ensure fast software delivery.<\/p>\n\n\n\n<p><a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/pipelines\/\">Pipelines<\/a> is a part of Azure DevOps which helps us to build, configure, and release our code, but for that, all you need is the Agent. Build or release agent is used to run your jobs and sends the result back to Azure DevOps. There are various offerings from Azure DevOps to run your build and release jobs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hosted Agent<\/h2>\n\n\n\n<p>Azure DevOps provides free hosted agents that have a predefined set of tools installed and configured for building and releasing your apps.  Microsoft-hosted agent pool offers 7 different virtual machine <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/pipelines\/agents\/hosted?view=azure-devops#use-a-microsoft-hosted-agent\">images<\/a>.<\/p>\n\n\n\n<p>Hosted agents are good to start but as soon as your team grows, then you have to face long queue time for the build and release. If the free tier doesn\u2019t meet your needs, you can still buy an additional parallel job with unlimited minutes which costs <strong>\u20ac33.74<\/strong> per month.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Self Hosted Agent <\/h2>\n\n\n\n<p>There is another option where you set up and manage your own agents. This can be done by simply downloading the agent package, and run it either on your local machine or any other computing platform even on Docker container. It also gives you more freedom to install specific dependencies for your build and release.<\/p>\n\n\n\n<p>The main disadvantages of the Hosted agent are maintenance and scalability. For instance, if you are running your agent as a docker container or directly on VM you need to make sure that the agent is not filling up disk storage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why not standard Hosted or self-hosted Agent<\/h2>\n\n\n\n<p>As mentioned before, we own an Azure DevOps account that contains multiple private projects. By default, Azure DevOps offers a hosted agent with one free parallel job.<\/p>\n\n\n\n<p>We started with provided free tier hosted Agents. As there was only an agent with one parallel job, we suffered a lot from long queue times. We bought a few more parallel jobs but actually, it was not that helpful as our account was hosting around 30 projects.<\/p>\n\n\n\n<p>As a quick workaround to reduce this long waiting time, most of the projects started setting up their own VMs and running multiple self-hosted agents as Docker containers. This enabled us to have more than one concurrent jobs running. The drawback of this solution was that almost every project was running their own VMs (not very cost-effective as VMs where mostly idling) and increasing maintenance overhead as well we slow scaling when new agents are needed (new VMs had to be set up etc.)<\/p>\n\n\n\n<p>This leads us to implement something out-of-the-box which could be cost-effective, easily scalable and can be shared among multiple projects. We finally came up with the idea of <strong>On-Demand Agent<\/strong> to manage such build\/release agents using some kind of outer orchestration and Kubernetes(to be specific AKS due to Microsoft Stack) was the easy choice.<\/p>\n\n\n\n<p>The basic idea was to create a pod running as an agent for each build\/release job to ensure clean and reliable agents all the time.<\/p>\n\n\n\n<p><strong>Note<\/strong>: <strong>On-Demand Agents<\/strong> come under the self-hosted agent category but the lifespan of such agent is specific build or release.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How does it work<\/h2>\n\n\n\n<p>Before proceeding with more details, it is important to understand the components which we are going to use in our On-Demand Agent Infrastructure on AKS.<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter columns-1 is-cropped wp-block-gallery-1\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"769\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-1024x769.jpg\" alt=\"On Demand Agents\" data-id=\"178\" data-full-url=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents.jpg\" data-link=\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/ondemandagents\/\" class=\"wp-image-178 is-layout-flex wp-block-gallery-is-layout-flex\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-1024x769.jpg 1024w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-300x225.jpg 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-768x577.jpg 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-1536x1154.jpg 1536w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-640x481.jpg 640w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents-1200x901.jpg 1200w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/01\/OnDemandAgents.jpg 1920w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Agent Pool<\/strong>: Collection of Agents. You can create an agent pool for your organization and share it among multiple projects. In our case, it is a collection of init agents.<\/li><li><strong>Init Agent<\/strong>: Important component of our infrastructure which is responsible for spinning up new pod\/agent and deleting respective pod\/agent based on your build\/release.<\/li><li><strong>On-Demand Agent<\/strong>: Agent which will be provisioned by init agent for your build\/release and will be deleted once build\/release is completed.<br><\/li><\/ul>\n\n\n\n<p>We follow approach described above, where we have dedicated agent pools for projects that have high development activity, which will lead to more builds and releases. At the same time, we have a common agent pool, which is being shared for small projects or for prototype projects.<\/p>\n\n\n\n<p>To&nbsp;incorporate&nbsp;on-demand&nbsp;agents&nbsp;with&nbsp;Azure&nbsp;Pipelines&nbsp;we&nbsp;need&nbsp;to&nbsp;split our existing build or release jobs into 3 phases:<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter columns-1 is-cropped wp-block-gallery-2\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"607\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-1024x607.png\" alt=\"\" data-id=\"371\" data-full-url=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases.png\" data-link=\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/ondemandagentphases\/\" class=\"wp-image-371 is-layout-flex wp-block-gallery-is-layout-flex\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-1024x607.png 1024w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-300x178.png 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-768x455.png 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-1536x911.png 1536w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-640x379.png 640w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases-1200x711.png 1200w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/onDemandAgentPhases.png 1810w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<ol><li><strong>Spin up Agent: <\/strong>This is the phase that creates an agent as per your need (a type of agent). Under the hood, we are triggering helm deployment which creates a Kubernetes Pod. We need to make sure that the SpinUp Agent phase is running on init agents. This can be done by specifying the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/pipelines\/process\/demands?view=azure-devops&amp;tabs=yaml\">demands<\/a>.<br><br><strong>Note<\/strong>: Init agent creates a new agent (pod) with the unique name <code>$(type)-$(Build.BuildId)<\/code> which will be used as a demand in the next phase. <br><br> <img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"243\" class=\"wp-image-370\" style=\"width: 700px;\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandInit.png\" alt=\"\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandInit.png 1200w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandInit-300x104.png 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandInit-1024x355.png 1024w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandInit-768x266.png 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandInit-640x222.png 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 700px\" \/><br><br><\/li><li><strong> Build or Release<\/strong>: This is the actual phase that will run your build or release. It is very important to pick the agent which was created earlier during the SpinUp Agent phase. To achieve that, we can use the agent name as a demand.<br><br><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"416\" class=\"wp-image-372\" style=\"width: 700px; margin-bottom: 30px\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandsAgent.png\" alt=\"\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandsAgent.png 1200w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandsAgent-300x104.png 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandsAgent-1024x355.png 1024w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandsAgent-768x266.png 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/demandsAgent-640x222.png 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><br>  <\/li><li><strong> Delete Agent<\/strong>: In this phase, we will just delete the agent (pod) which was created during the SpinUp Agent phase. We have to make sure, we are deleting the correct agent, which can be done by deleting the helm deployment by name (<code>$(type)-$(Build.BuildId)<\/code>).<br>This phase must run on the &#8216;init&#8217; agent.<\/li><\/ol>\n\n\n\n<p><strong>Important<\/strong>: We need to preserve the sequential order which we specify for the phases as every phase is dependent on the previous phase.<br>For instance, the <strong>Build or Release<\/strong> phase depends on the <strong>Spin up Agent<\/strong> and its success. Moreover, Delete Agent follows the above sequential order but will continue to run on an error: <code>continueOnError: true<\/code><\/p>\n\n\n\n<p>This can be achieved by specifying <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/pipelines\/process\/stages?view=azure-devops&amp;tabs=yaml#specify-dependencies\">dependencies<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s next<\/h2>\n\n\n\n<p> As we have just covered the most theoretical part of our On-Demand Agent. In\u00a0<a href=\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents-part-2\/\">part two<\/a>\u00a0of this series, I will further deep dive into underlying infrastructure, tooling, and integration with Azure Pipelines.<br><br><strong>[Update] <a href=\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents-part-2\/\">Part 2 <\/a>has been posted<\/strong>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In today\u2019s DevOps world, Continuous Integration and Continuous  Delivery allow software engineers to deliver values to customers  rapidly. We as Digital Innovation Partners at Zeiss use Azure Devops extensively to ensure fast software delivery.<\/p>\n","protected":false},"author":6,"featured_media":345,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[8,32,33],"tags":[],"topics":[16],"class_list":["post-175","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ci-cd","category-kubernetes","category-helm","topics-agents"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MS Azure DevOps: On-Demand Agents - Digital Innovation Partners<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MS Azure DevOps: On-Demand Agents - Digital Innovation Partners\" \/>\n<meta property=\"og:description\" content=\"In today\u2019s DevOps world, Continuous Integration and Continuous Delivery allow software engineers to deliver values to customers rapidly. We as Digital Innovation Partners at Zeiss use Azure Devops extensively to ensure fast software delivery.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Partners\" \/>\n<meta property=\"article:published_time\" content=\"2020-02-24T06:33:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-31T11:21:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1919\" \/>\n\t<meta property=\"og:image:height\" content=\"1279\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Cizer Pereira\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cizer Pereira\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/\",\"name\":\"MS Azure DevOps: On-Demand Agents - Digital Innovation Partners\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg\",\"datePublished\":\"2020-02-24T06:33:00+00:00\",\"dateModified\":\"2020-08-31T11:21:13+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/e09d8fad6dc3c9ac00e03fb20c38c185\"},\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg\",\"width\":1919,\"height\":1279,\"caption\":\"Tubes running in the direction of the setting sun. Pipeline transportation is most common way of transporting goods such as Oil, natural gas or water on long distances.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/tech\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MS Azure DevOps: On-Demand Agents\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/\",\"name\":\"Digital Innovation Partners\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/tech\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/e09d8fad6dc3c9ac00e03fb20c38c185\",\"name\":\"Cizer Pereira\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_CizerPereira-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_CizerPereira-150x150.jpg\",\"caption\":\"Cizer Pereira\"},\"description\":\"Cizer is working as a software engineer with focus on infrastructure. He joined ZEISS Digital Innovation Partners in October 2017. His current focus is on CI\/CD, infrastructure and related automation topics.\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/author\/cizer-pereirazeiss-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MS Azure DevOps: On-Demand Agents - Digital Innovation Partners","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:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/","og_locale":"en_US","og_type":"article","og_title":"MS Azure DevOps: On-Demand Agents - Digital Innovation Partners","og_description":"In today\u2019s DevOps world, Continuous Integration and Continuous Delivery allow software engineers to deliver values to customers rapidly. We as Digital Innovation Partners at Zeiss use Azure Devops extensively to ensure fast software delivery.","og_url":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/","og_site_name":"Digital Innovation Partners","article_published_time":"2020-02-24T06:33:00+00:00","article_modified_time":"2020-08-31T11:21:13+00:00","og_image":[{"width":1919,"height":1279,"url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg","type":"image\/jpeg"}],"author":"Cizer Pereira","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Cizer Pereira","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/","url":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/","name":"MS Azure DevOps: On-Demand Agents - Digital Innovation Partners","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg","datePublished":"2020-02-24T06:33:00+00:00","dateModified":"2020-08-31T11:21:13+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/e09d8fad6dc3c9ac00e03fb20c38c185"},"breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines.jpg","width":1919,"height":1279,"caption":"Tubes running in the direction of the setting sun. Pipeline transportation is most common way of transporting goods such as Oil, natural gas or water on long distances."},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/tech\/ms-azure-devops-on-demand-agents\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/tech\/"},{"@type":"ListItem","position":2,"name":"MS Azure DevOps: On-Demand Agents"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/tech\/#website","url":"https:\/\/blogs.zeiss.com\/tech\/","name":"Digital Innovation Partners","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/e09d8fad6dc3c9ac00e03fb20c38c185","name":"Cizer Pereira","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_CizerPereira-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/02\/Picture_CizerPereira-150x150.jpg","caption":"Cizer Pereira"},"description":"Cizer is working as a software engineer with focus on infrastructure. He joined ZEISS Digital Innovation Partners in October 2017. His current focus is on CI\/CD, infrastructure and related automation topics.","url":"https:\/\/blogs.zeiss.com\/tech\/author\/cizer-pereirazeiss-com\/"}]}},"author_meta":{"display_name":"Cizer Pereira","author_link":"https:\/\/blogs.zeiss.com\/tech\/author\/cizer-pereirazeiss-com\/"},"featured_img":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/pipelines-300x200.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/ci-cd\/\" class=\"advgb-post-tax-term\">CI\/CD<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/kubernetes\/\" class=\"advgb-post-tax-term\">Kubernetes<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/helm\/\" class=\"advgb-post-tax-term\">Helm<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">CI\/CD<\/span>","<span class=\"advgb-post-tax-term\">Kubernetes<\/span>","<span class=\"advgb-post-tax-term\">Helm<\/span>"]}},"comment_count":"5","relative_dates":{"created":"Posted 6 years ago","modified":"Updated 6 years ago"},"absolute_dates":{"created":"Posted on February 24, 2020","modified":"Updated on August 31, 2020"},"absolute_dates_time":{"created":"Posted on February 24, 2020 6:33 am","modified":"Updated on August 31, 2020 11:21 am"},"featured_img_caption":"Tubes running in the direction of the setting sun. Pipeline transportation is most common way of transporting goods such as Oil, natural gas or water on long distances.","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/comments?post=175"}],"version-history":[{"count":22,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/175\/revisions"}],"predecessor-version":[{"id":451,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/175\/revisions\/451"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/media\/345"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/media?parent=175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/categories?post=175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/tags?post=175"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/topics?post=175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}