Dev Tools 1 service 2 GiB RAM 5 GB disk

Azure Pipelines Agent

A self-hosted Azure DevOps agent from Microsoft’s official recipe - $13/month vs $40/month per hosted parallel job.

One-click deploy, from $13/mo on a Miget plan.

Azure DevOps prices CI by the parallel job: $40/month per Microsoft-hosted pipeline, $15/month per additional self-hosted one - and the free grant for new organizations currently requires a request form. Bringing your own agent is the documented, encouraged escape hatch.

Microsoft ships no agent container image; their docs provide a Dockerfile recipe instead - which is exactly what this template packages. On first boot the agent downloads itself from your organization, registers into the pool with your PAT, and starts taking jobs; on shutdown it deregisters cleanly.

Script, checkout, and task steps run in-container. The usual platform note applies: no Docker daemon, so container jobs and Docker tasks stay on hosted agents or switch to rootless builders.

#what you get

  • Built from Microsoft’s official Dockerfile recipe - no third-party image
  • Auto-registers on boot, deregisters on shutdown (--replace safe)
  • Pool-based targeting: pool: Default in your YAML
  • Service-principal auth supported upstream if PATs are banned
  • Extend the Dockerfile with your toolchains
  • Unlimited minutes - the plan is the bill

#topology

ServiceRolePublic
agentAzure Pipelines agent, outbound to dev.azure.comno - no ingress needed

#miget sizing

// this stack needs

2 GiB RAM · 5 GB disk · 1 service

The agent idles light; .NET and Java builds are the RAM consumers. One agent = one parallel job - add replicas (each with a distinct AZP_AGENT_NAME via prefix) for concurrency.

Hobby - recommended fit

$13/mo

1 vCPU · 2 GiB · 50 GiB disk

Headroom for your own apps: 2 GiB at $19/mo

Professional - production

$22/mo

1 vCPU · 2 GiB · 10 GiB disk

Dedicated resources, production SLOs - plan details

One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.

#vs. the managed service

What the hosted equivalents charge, against the flat Miget plan this stack fits on. Prices as of June 2026, sources linked.

ServicePlanMonthlyWhat you get
Azure Pipelines Agent on Miget 2 GiB plan$13this whole stack, flat - no usage meters, and room left for your own apps
Azure PipelinesMicrosoft-hosted~$40per parallel job per month; self-hosted parallel jobs $15/mo each (first free)

#vs. other PaaS

Estimated monthly cost of running this exact stack (2 GiB RAM, 5 GB disk, 1 container) elsewhere, from published June 2026 rates.

PlatformEst. monthlyNotes
Miget $13 flat compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan
Heroku ~$100 no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown
DO App Platform ~$29 no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here)
Render ~$26 per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service
Railway ~$21 usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top
Fly.io ~$13 cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra

Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.

#deploy it

On Miget

  1. Create a Compose Stack in app.miget.com pointing at the templates repository
  2. Set the stack path to azp-agent
  3. Set the required variables:
    • AZP_URL, https://dev.azure.com/your-org
    • AZP_TOKEN, PAT with Agent Pools (read, manage) scope
  4. Deploy. Miget layers compose.miget.yaml (RAM, privacy, volumes, managed services) automatically

Locally first?

Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:

git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/azp-agent
docker compose up -d

Same files, same behavior. The template README covers connection strings and scaling notes.

#faq

What does this replace, cost-wise?

Each Microsoft-hosted parallel job is $40/month; each extra self-hosted parallel job license is $15/month (the first is free). The agent’s compute here rides the same flat plan as the rest of your stack - so a second and third pipeline cost license fees only, not VM bills.

Why is there no official agent image?

Microsoft deliberately documents a build-your-own Dockerfile (the agent version-locks to your org and updates itself). This template is that recipe, faithfully: ubuntu:24.04, the documented start.sh flow, non-root agent user, clean deregistration trap.

Do classic and YAML pipelines both work?

Yes - the agent is the same for both. Target it via the agent pool. Container jobs and Docker@2-style tasks need a daemon this platform does not expose; everything script- and task-based runs normally.

Ship Azure Pipelines Agent today

One compose stack, 2 GiB of RAM, from $13/month flat, and it runs on your laptop with the same files.