{"id":501,"date":"2026-07-30T22:46:22","date_gmt":"2026-07-30T22:46:22","guid":{"rendered":"https:\/\/windows-vps.org\/blog\/?p=501"},"modified":"2026-08-11T22:23:53","modified_gmt":"2026-08-11T22:23:53","slug":"windows-vps-build-agents-azure-devops","status":"publish","type":"post","link":"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/","title":{"rendered":"Windows VPS Build Agents: Sizing, Security, and Maintenance"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Self-hosted build agents are the standard answer when Microsoft-hosted pipelines get too slow, too expensive, or too restrictive for Windows workloads. A Windows VPS running an Azure DevOps agent or a GitHub Actions runner gives you a dedicated machine that is always online, pre-loaded with your toolchain, and free of queue delays. The installation steps are documented well enough; the part most teams get wrong is sizing, security, and day-to-day maintenance. This article covers those three areas with numbers you can actually plan around.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When a self-hosted Windows agent is worth it<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Queue times:<\/strong> Microsoft-hosted agents routinely show 30&#8211;60 minute waits during peak hours; a self-hosted agent starts building the moment the job is assigned.<\/li>\n<li><strong>Cost:<\/strong> At roughly $0.06 per minute for a Windows hosted agent, 2,000 build minutes per month costs about $120. A 4 vCPU \/ 8 GB Windows VPS typically costs $20&#8211;$40 per month and covers far more than 2,000 minutes.<\/li>\n<li><strong>Custom tooling:<\/strong> Pre-install SDKs, certificates, database engines, and license files once instead of downloading them in every job.<\/li>\n<li><strong>Data locality:<\/strong> Source code and build artifacts never leave your own server, which matters for compliance-sensitive projects.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The trade-off is that you now own patching, disk cleanup, and capacity planning. That is exactly what the rest of this article covers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sizing your build agent VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Builds are bursty: restore and compile phases spike every core, then the machine sits idle. Size for the peak, not the average. The table below reflects what real .NET, C++, and Unity pipelines consume:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Build type<\/th><th>Minimum<\/th><th>Recommended<\/th><\/tr><\/thead><tbody>\n<tr><td>Small .NET \/ ASP.NET solutions<\/td><td>2 vCPU, 4 GB RAM, 50 GB SSD<\/td><td>4 vCPU, 8 GB RAM, 100 GB SSD<\/td><\/tr>\n<tr><td>Large .NET solutions with test runs<\/td><td>4 vCPU, 8 GB RAM, 100 GB SSD<\/td><td>8 vCPU, 16 GB RAM, 200 GB SSD<\/td><\/tr>\n<tr><td>C++ \/ Unreal Engine<\/td><td>4 vCPU, 16 GB RAM, 200 GB SSD<\/td><td>8 vCPU, 32 GB RAM, 400 GB SSD<\/td><\/tr>\n<tr><td>Unity builds<\/td><td>4 vCPU, 8 GB RAM, 100 GB SSD<\/td><td>8 vCPU, 16 GB RAM, 200 GB SSD<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Disk is the spec people under-buy most often. The agent&#8217;s <code>_work<\/code> folder, NuGet and npm caches, and parallel build outputs accumulate quickly; a 50 GB system drive fills up in weeks on an active pipeline. Choose NVMe storage and at least 100 GB if you can, because restore and compile times are largely I\/O-bound. If you need to compare plans across providers, <a href=\"https:\/\/windows-vps.org\/#providers\">our Windows VPS comparison table<\/a> lists storage type and bandwidth for each plan side by side.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installing the agent (recap)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The setup itself is short for both platforms. For <strong>Azure DevOps<\/strong>, RDP into the VPS, create a dedicated service account, download the agent from Organization Settings &#8594; Agent Pools &#8594; New Agent, extract it, and configure:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\agents\n.\\config.cmd --unattended --url https:\/\/dev.azure.com\/YOUR_ORG \\\n  --auth pat --token YOUR_PAT --pool Default --runasservice<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For <strong>GitHub Actions<\/strong>, go to the repository or organization Settings &#8594; Actions &#8594; Runners, download the Windows runner package, then register it:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\actions-runner\n.\\config.cmd --url https:\/\/github.com\/YOUR_ORG --token YOUR_TOKEN --runasservice\n.\\svc.ps1 install<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Security configuration<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Run the agent under a dedicated service account<\/strong> with no administrative rights and no interactive logon. It only needs read access to the repo checkout and write access to its own folders.<\/li>\n<li><strong>Restrict inbound firewall rules<\/strong> to RDP from your admin IPs only; the agent itself makes outbound connections and needs no inbound ports.<\/li>\n<li><strong>Rotate PAT and registration tokens<\/strong> on a schedule (quarterly is a reasonable default) and revoke tokens when a developer leaves.<\/li>\n<li><strong>Limit agent pool permissions<\/strong> in Azure DevOps \/ GitHub so only the pipeline service principal can queue jobs to the pool.<\/li>\n<li><strong>Isolate pools<\/strong>: keep production and staging builds on separate agent machines so a compromised build can&#8217;t reach both environments.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Also think about <strong>network isolation<\/strong>. If your pipeline pulls from a private Git server or an internal package feed, confirm the agent VPS can reach them, then block outbound traffic to anything the build does not need. Build agents with write access to artifact feeds are a common pivot point in supply-chain attacks, so restrict outbound destinations wherever your provider&#8217;s firewall allows it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Maintenance that keeps builds fast<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Windows Update:<\/strong> install patches monthly; schedule it outside build hours and reboot before the morning queue.<\/li>\n<li><strong>Disk cleanup:<\/strong> run the agent&#8217;s built-in cleanup (or a scheduled task that clears <code>C:\\agents\\_work<\/code> and NuGet cache folders) weekly. Full disks are the #1 cause of mystery build failures.<\/li>\n<li><strong>Watch queue depth:<\/strong> if jobs regularly wait behind each other, your agent is undersized &#8212; add a second agent or raise vCPU before developers start complaining.<\/li>\n<li><strong>Verify the service:<\/strong> after any Windows update, confirm the agent service started and reconnected to the pool.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">One operational habit pays off more than any tuning: track build duration and queue depth over time. If average build time creeps up while queue depth stays flat, the machine is degrading (usually disk filling or throttling); if queue depth grows, the box is undersized. A scheduled task that logs both numbers once a day gives you the trend line you need before developers start complaining.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A correctly sized and maintained self-hosted agent pays for itself in developer productivity within a few weeks. Start at 4 vCPU \/ 8 GB RAM, monitor queue depth, and scale up only when builds actually wait. To find a plan that fits your pipeline budget, <a href=\"https:\/\/windows-vps.org\/#features\">see the full specs and pricing on the main site<\/a>, or check <a href=\"https:\/\/interserver.net\/r\/1067805?url=interserver.net\/vps\/windows-vps.html\" rel=\"noreferrer noopener sponsored\" target=\"_blank\">InterServer&#8217;s Windows VPS plans<\/a> (promo code TRYINTERSERVER gives a 1-cent first month on price-locked plans).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Self-hosted build agents are the standard answer when Microsoft-hosted pipelines get too slow, too expensive, or too restrictive for Windows workloads. A Windows VPS running an Azure DevOps agent or a GitHub Actions runner gives you a dedicated machine that is always online, pre-loaded with your toolchain, and free of queue delays. The installation steps &#8230; <a title=\"Windows VPS Build Agents: Sizing, Security, and Maintenance\" class=\"read-more\" href=\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/\" aria-label=\"Read more about Windows VPS Build Agents: Sizing, Security, and Maintenance\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":3,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-501","post","type-post","status-publish","format-standard","hentry","category-tutorials-guides"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Windows VPS Build Agents: Sizing, Security, and Maintenance - Windows VPS Blog<\/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:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Windows VPS Build Agents: Sizing, Security, and Maintenance\" \/>\n<meta property=\"og:description\" content=\"Windows VPS Build Agents: Sizing, Security, and Maintenance\" \/>\n<meta property=\"og:url\" content=\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/\" \/>\n<meta property=\"og:site_name\" content=\"Windows VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T22:46:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-11T22:23:53+00:00\" \/>\n<meta name=\"author\" content=\"windows-vps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"windows-vps\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/\",\"url\":\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/\",\"name\":\"Windows VPS Build Agents: Sizing, Security, and Maintenance - Windows VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\"},\"datePublished\":\"2026-07-30T22:46:22+00:00\",\"dateModified\":\"2026-08-11T22:23:53+00:00\",\"author\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\"},\"breadcrumb\":{\"@id\":\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/windows-vps.org\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Windows VPS Build Agents: Sizing, Security, and Maintenance\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#website\",\"url\":\"https:\/\/windows-vps.org\/blog\/\",\"name\":\"Windows VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/windows-vps.org\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58\",\"name\":\"windows-vps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g\",\"caption\":\"windows-vps\"},\"sameAs\":[\"https:\/\/windows-vps.org\/blog\"],\"url\":\"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Windows VPS Build Agents: Sizing, Security, and Maintenance - Windows VPS Blog","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:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/","og_locale":"en_US","og_type":"article","og_title":"Windows VPS Build Agents: Sizing, Security, and Maintenance","og_description":"Windows VPS Build Agents: Sizing, Security, and Maintenance","og_url":"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/","og_site_name":"Windows VPS Blog","article_published_time":"2026-07-30T22:46:22+00:00","article_modified_time":"2026-08-11T22:23:53+00:00","author":"windows-vps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"windows-vps","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/","url":"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/","name":"Windows VPS Build Agents: Sizing, Security, and Maintenance - Windows VPS Blog","isPartOf":{"@id":"https:\/\/windows-vps.org\/blog\/#website"},"datePublished":"2026-07-30T22:46:22+00:00","dateModified":"2026-08-11T22:23:53+00:00","author":{"@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58"},"breadcrumb":{"@id":"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/windows-vps.org\/blog\/windows-vps-build-agents-azure-devops\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/windows-vps.org\/blog\/"},{"@type":"ListItem","position":2,"name":"Windows VPS Build Agents: Sizing, Security, and Maintenance"}]},{"@type":"WebSite","@id":"https:\/\/windows-vps.org\/blog\/#website","url":"https:\/\/windows-vps.org\/blog\/","name":"Windows VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/windows-vps.org\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/44caceed916d0db318aa08d5623a7a58","name":"windows-vps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/windows-vps.org\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3f2573db5afcd1a6ab9abcc5d48fc8e42584bc87ab9d98cc156e5b2097766dd9?s=96&d=mm&r=g","caption":"windows-vps"},"sameAs":["https:\/\/windows-vps.org\/blog"],"url":"https:\/\/windows-vps.org\/blog\/author\/myxiechengxuan\/"}]}},"_links":{"self":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/comments?post=501"}],"version-history":[{"count":3,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/501\/revisions"}],"predecessor-version":[{"id":595,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/posts\/501\/revisions\/595"}],"wp:attachment":[{"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/media?parent=501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/categories?post=501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/windows-vps.org\/blog\/wp-json\/wp\/v2\/tags?post=501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}