A Jenkins fleet your agents can run

Varroa runs every Jenkins controller as a Kubernetes resource and exposes the whole fleet over the Model Context Protocol. Ask an agent to create a controller, compose its config bundle, and run a job. It works under that agent's own identity and RBAC, not a shared admin token.

Everything an agent can do, you can do declaratively. Provisioning, JCasC bundles, RBAC federation, plugin pinning, and scale-to-zero are all driven from CRDs. It is the open-source alternative to Jenkins sprawl or a CloudBees CI contract.

apiVersion: varroa.dev/v1alpha1
kind: Controller
metadata:
  name: team-alpha
  namespace: varroa
spec:
  version: "2.516.3"
  composedBundleRef:
    name: platform-standard
  className: standard

Drive the fleet with an AI agent

varroactl mcp exposes Varroa over the Model Context Protocol. An agent can compose a config bundle, create a controller from it, run a job, and read the result. Every call runs under its own caller identity and RBAC.

Bring up a Jenkins controller for team-alpha and run its smoke-test job.
create_composed_bundle({ name: "team-alpha-baseline", inputs: [...] })
→ ComposedBundle/team-alpha-baseline ready, contentRef resolved
create_controller({ name: "team-alpha", namespace: "teams-platform", composedBundleRef: "team-alpha-baseline" })
→ Controller/team-alpha created, phase: Provisioning
call_jenkins_tool({ name: "team-alpha", method: "tools/call", params: { name: "build_job", … } })
→ Build #1 queued, then SUCCESS
call_jenkins_tool({ name: "team-alpha", method: "tools/call", params: { name: "get_build_log", … } })
→ "smoke-test PASSED"

Example session. Tool names and arguments are real; the responses are illustrative.

The brood overview: every controller, its phase, and its recent history in one place. Tap to expand.

What Varroa gives you

Already running CloudBees CI?

See how Varroa's CRD-native controllers, bundles, and RBAC federation line up against CloudBees CI, and what changes if you migrate.

The control planes differ most in how they scale. Operations center runs as a single instance with its own Jenkins home directory. CloudBees documents High Availability (active/active) for managed controllers, and for operations center documents fault tolerance that restarts it when unhealthy. Varroa's operator is not a Jenkins instance at all. It runs active/active across replicas and shards controllers over a 256-shard ring, so the control plane scales by adding pods.

Compare Varroa to CloudBees CI