Skip to content

Documentation

Dutest is a self-hosted CI and deployment server. Plans build your code on remote agents, releases are cut from builds that passed, and environments receive them.

The pieces

Controller. The server. It holds the web interface, the REST API, the scheduler and everything that persists, backed by PostgreSQL and a blob store for logs and artifacts. It is the only part anybody signs in to.

Agents. The machines that run your build. An agent connects out to the controller over gRPC and advertises what it can do, so an agent behind NAT needs no inbound route and your build machines need no hole punched into them.

Plans. What gets built. A plan names its repositories, when it should build, and the pipeline document that says what building means.

Deployment projects. What gets shipped. A deployment project belongs to a plan, cuts releases from builds that passed, and sends them to environments of its own, each with its own permissions.

How a build happens

A push, a schedule, an upstream plan or a person starts a build. The controller resolves the commit, reads the pipeline document, and queues the first stage's jobs.

Stages run strictly in order: a stage starts only once the one before it succeeded. Jobs within a stage run in parallel, each on one agent, and every step of a job shares that agent's workspace — so a step can rely on what the step before it installed or wrote. A job is only ever offered to an agent that satisfies its requirements and has the CPU and memory it asked for still unspoken for.

What a job produces — artifacts, JUnit XML, coverage reports — comes back to the controller as it goes. A later stage can consume an earlier stage's artifacts, which arrive in the workspace before its first step runs.

What it is not

It is not a hosted service. Your source, your artifacts and your secrets stay on your infrastructure, and a licence is a signed file your server checks against a key it already has — it never contacts anything, so an air-gapped network is no obstacle.

Where to start

Install and run
What it needs, first start, and connecting the first agent.
Deploying it
Running it on Kubernetes, storage, keys, and the settings worth getting right before anyone depends on it.
Configuring a build plan
From an empty server to a repository that builds on every push.
Pipeline reference
Every key of the YAML document, and what each one does.
The REST API
Everything the pages do, from a script.