Immutable Jenkins Infrastructure: Replacing Instead of Repairing

Immutable Jenkins Infrastructure: Replacing Instead of Repairing

A deep, beginner-friendly guide to treating Jenkins controllers and agents as disposable, rebuildable infrastructure — and why organizations increasingly stop patching machines in place and start replacing them entirely.

Imagine two ways of dealing with a broken light bulb. In one, you keep the same physical bulb but repeatedly repair its filament, its wiring, and its glass casing over years, and eventually nobody remembers exactly which repairs have been made or in what order. In the other, when a bulb breaks, you simply throw it away and screw in a brand-new one — fresh, predictable, exactly like every other bulb of its kind. Most people, without a second thought, already treat light bulbs the second way. Immutable Jenkins infrastructure applies that exact same instinct to Jenkins controllers and agents: rather than logging into a running machine and patching, tweaking, and repairing it over time, an organization defines exactly how that machine should be built, and whenever a change is needed, it builds an entirely new one and throws the old one away. This tutorial explains what this approach actually involves, why it’s become increasingly popular, and how to adopt it thoughtfully, assuming no prior Jenkins experience.

1What Is Immutable Infrastructure, Applied to Jenkins?

Before looking at Jenkins specifically, it helps to understand this concept in its more general form.

Mutable versus immutable infrastructure

Mutable infrastructure is a machine that’s changed in place over its lifetime — software is installed, updated, and reconfigured directly on the same running instance, again and again, for as long as that machine exists. Immutable infrastructure instead treats a machine’s configuration as fixed once it’s built — any needed change results in building an entirely new machine from a known, defined starting point, rather than modifying the existing one at all.

Simple Analogy

Think of the difference between a handwritten ledger, corrected and amended in place over years with crossed-out numbers and margin notes, versus a fresh, freshly printed report generated anew each time from a clean, authoritative source. The printed report is never edited directly — if something needs to change, a new report is generated from scratch.

Applying this to a Jenkins controller and its agents

An immutable Jenkins controller is defined entirely through configuration as code and a specific, versioned machine image, and any change — a new plugin, an updated setting — results in building a brand-new controller instance from that updated definition, rather than an administrator logging into the existing controller and manually making the change directly on it.

Mutable Approach

Log In and Patch

An administrator connects to the running machine and applies changes directly.

Immutable Approach

Rebuild and Replace

A new machine is built from an updated definition, and the old one is discarded.

Foundation

Configuration as Code

The machine’s exact intended state is defined in version-controlled files, not in someone’s memory.

The rest of this tutorial explores exactly what makes this shift possible for Jenkins, why organizations increasingly prefer it, and what genuinely needs careful thought to make it work well in practice.

2Why Immutable Jenkins Infrastructure Exists

This approach exists because a machine that’s been manually patched and adjusted for years develops a very specific, very frustrating kind of problem.

The problem of configuration drift

A traditional, mutable Jenkins controller accumulates small, individually reasonable manual changes over months and years — a plugin installed here, a setting tweaked there, a quick fix applied during an incident — and over time, nobody has a complete, accurate picture of exactly what state that machine is actually in, a phenomenon generally referred to as configuration drift.

!
Common Mistake

Assuming a long-running controller’s current configuration matches its documentation — after enough manual, undocumented changes accumulate over time, the two can drift meaningfully apart, and nobody notices until something breaks in a confusing, hard-to-diagnose way.

Immutability as a forcing function for accurate documentation

Because an immutable controller can only be changed by rebuilding it from its defining configuration, that configuration is, by necessity, always accurate — there’s no possibility of an undocumented, manual change existing on the running instance, since the running instance is never manually touched at all.

0
Undocumented manual changes possible
1
Authoritative, version-controlled definition
Predictable
Rebuilds instead of unpredictable drift

Faster, more reliable recovery from failure

Because an immutable controller’s exact configuration already exists as reproducible, version-controlled code, recovering from a genuine hardware or software failure means simply building a fresh instance from that same definition, rather than trying to recall and manually reapply years of accumulated, undocumented tweaks under real time pressure.

Eliminating “Works on the Old Controller, Not the New One”

A team that adopts immutable infrastructure eliminates a recurring, frustrating class of problems where a disaster-recovery restore, or a new staging environment, behaves subtly differently from production simply because years of untracked manual changes were never fully captured in any backup or documentation.

3The Anatomy of an Immutable Jenkins Setup

A handful of consistent pieces work together to make an immutable approach actually practical for Jenkins.

The machine image as the reproducible starting point

A machine image — a snapshot capturing the operating system, installed dependencies, and often Jenkins itself, pre-configured to a known, specific state — serves as the exact, reproducible foundation every new controller or agent instance is built from, ensuring every instance built from the same image starts out genuinely identical.

PieceRoleEveryday Comparison
Machine imageA reproducible, versioned snapshot instances are built fromThe master mold used to cast every identical light bulb
Configuration as codeDefines Jenkins’s own settings within that imageThe specific filament design baked into the mold
Externalized persistent dataJob history, build data, kept separate from the disposable instanceThe lamp’s own wiring, unaffected when a bulb is swapped
Automated build pipelineThe process that actually produces a new image or instanceThe factory line that produces each new, identical bulb

Configuration as code layered on top of the image

Building on the same configuration-as-code principle covered elsewhere in this guide, an immutable setup typically defines Jenkins’s own system settings, plugin list, and other configuration declaratively, applied automatically as the image is built or as a new instance starts, ensuring the resulting controller’s software configuration is just as reproducible as its underlying operating system.

Simple Analogy

This is similar to a furniture assembly kit with a precise, written instruction sheet — anyone following the exact same instructions with the exact same parts produces an identical result, regardless of who’s actually doing the assembling or when.

Why persistent data must live somewhere else entirely

Because an immutable instance is meant to be freely discarded and replaced, anything genuinely needing to survive that replacement — job configurations, build history, credentials — has to be stored somewhere external to the disposable instance itself, a concept explored in depth in the dedicated chapter on separating state later in this tutorial.

Component

Machine Image

A reproducible, versioned foundation every instance is built from.

Component

Configuration as Code

Declaratively applied Jenkins settings, layered on top of the image.

Component

Externalized State

Persistent data stored separately from the disposable compute instance.

4How Jenkins Instances Are Built and Replaced Internally

Understanding the actual mechanics behind building and replacing an instance clarifies how this approach differs from a traditional patch-in-place upgrade.

The image build process

An automated process, itself often defined and version-controlled like any other pipeline, takes a base operating system, installs Jenkins and any required dependencies, applies system configuration through configuration as code, and produces a finished, versioned machine image — this entire process is repeatable and produces the exact same result every time it’s run against the same defining source.

sequenceDiagram
    participant Repo as Configuration Source Repository
    participant Build as Automated Image Build
    participant Image as Versioned Machine Image
    participant Old as Old Running Instance
    participant New as New Instance
    participant State as Externalized Persistent Data
    Repo->>Build: A configuration change is committed
    Build->>Image: A new, versioned image is produced
    Image->>New: A new instance is launched from the image
    New->>State: Connects to the same externalized persistent data
    New-->>Old: Traffic is switched to the new instance
    Old->>Old: The old instance is discarded
        
FIG 1 — How a configuration change flows through image building into an actual instance replacement

Replacing rather than modifying a running instance

When a change is needed, rather than connecting to the existing controller and applying that change directly, a new image incorporating the change is built, a new instance is launched from it, that new instance is connected to the same externalized persistent data the old one was using, and traffic is then switched over — the old instance is simply discarded once the new one is confirmed working correctly.

i
Helpful Note

This replace-rather-than-modify pattern is exactly why immutable infrastructure pairs so naturally with the blue-green switching approach discussed elsewhere in this guide for minimizing upgrade disruption — the two ideas reinforce each other directly.

What genuinely changes, and what genuinely doesn’t

The compute instance itself — its operating system, its installed software, its underlying virtual or physical machine — is entirely disposable and regularly replaced, while the externalized persistent data it connects to remains stable and continuous across every single replacement, providing the actual continuity of Jenkins’s job history and configuration over time.

5Data Flow and the Rebuild Lifecycle

Following a single configuration change from commit to a fully replaced, running instance shows exactly how the pieces connect.

1

A configuration change is committed

A new plugin, an updated setting, or a base image update is defined in version-controlled source.

2

A new image is automatically built

The automated build process produces a fresh, versioned machine image incorporating the change.

3

A new instance is launched from the image

A brand-new controller or agent instance starts, connecting to the same externalized persistent data.

4

The new instance is validated

Automated or manual checks confirm the new instance is functioning correctly before it takes over.

5

Traffic switches over, and the old instance is discarded

Users and pipelines are directed to the new instance, and the previous one is decommissioned entirely.

What flows continuously, and what’s regenerated each time

The persistent data — job configurations, build history, credentials — flows continuously across every single replacement, entirely untouched by the process, while the compute instance itself, along with its exact operating system and software state, is regenerated fresh from the source image on every single rebuild.

Simple Analogy

This is similar to a chain restaurant replacing its kitchen equipment on a schedule with identical, brand-new units, while the recipes, the customer records, and the actual food being served remain entirely continuous and unaffected by which specific physical equipment happens to be running the kitchen at any given moment.

6Types of Immutability and Where They’re Applied

Immutability can be applied at different layers of a Jenkins deployment, and organizations often start with the layer that’s easiest to adopt first.

Immutable Agents

Build agents are provisioned fresh for each build, or on a regular cycle, from a known, versioned image, and discarded afterward — the most commonly adopted form of immutability, given how naturally agents already tend to be ephemeral, particularly in cloud-based setups.

Immutable Controller

The controller itself is built and replaced from a versioned image and configuration as code, rather than being manually patched in place — a more significant undertaking, given how much more state and coordination responsibility a controller genuinely carries.

Immutable Plugin and Configuration Bundles

Rather than installing and updating plugins directly through the interface, the exact plugin set and version is defined declaratively and baked into the image at build time, ensuring every controller instance’s plugin configuration is exactly reproducible.

Fully Immutable Jenkins-as-Code Deployments

An entire Jenkins deployment, controller and agents together, is defined and deployed through a fully automated, code-driven process, representing the most complete, mature form of this approach.

A natural, incremental adoption path

Because agents are typically simpler and hold less irreplaceable state than the controller, many organizations begin their immutable infrastructure journey by making agents immutable first, only extending the same discipline to the controller itself once they’ve built confidence and experience with the underlying process.

LayerTypical DifficultyCommon Starting Point
AgentsLower — often already ephemeralUsually adopted first
Plugin and config bundlesMediumOften adopted alongside or shortly after agents
ControllerHigher — more state and coordination responsibilityTypically adopted once the organization has more experience
Fully immutable, end-to-end deploymentHighest — represents full maturityA long-term goal for many organizations

7Separating State from Everything Else

This single design principle is what makes immutability genuinely practical for something as stateful as a Jenkins controller.

Identifying exactly what needs to survive a rebuild

Job configurations, build history, credentials, and system settings all represent genuine, valuable state that must survive every single instance replacement — clearly identifying and cataloging exactly what falls into this category is the essential first step before attempting to make a controller immutable at all.

Simple Analogy

This is similar to a hermit crab that regularly outgrows and discards its shell, while its own actual body — its genuinely irreplaceable self — moves into a new one each time. The shell is disposable; the crab inside it is not.

Externalizing that state to durable, independent storage

Rather than storing this genuinely valuable state on the disposable instance’s own local disk, a robust immutable setup keeps it on durable, independently managed storage that exists entirely separately from any single compute instance’s lifecycle — the same architectural pattern discussed for controller high availability elsewhere in this guide.

Must Be Externalized

Job Configurations

The definitions of every job and pipeline configured on the instance.

Must Be Externalized

Build History

Records and logs from every previous build.

Must Be Externalized

Credentials

The secrets stored in the credential store, essential for pipelines to function.

Why getting this separation wrong undermines the entire approach

If any genuinely important state is accidentally left on the disposable instance’s local storage rather than properly externalized, that state is silently lost the very first time the instance is replaced — undermining the reliability the whole approach is meant to provide, and often not discovered until well after the fact.

8Advantages and Trade-offs

Immutable infrastructure brings genuine, meaningful benefits, but adopting it requires real upfront investment and discipline.

Advantages

  • Eliminates configuration drift, since the running instance is never manually modified
  • Makes disaster recovery dramatically faster and more predictable
  • Provides a genuinely accurate, always-current source of truth for the instance’s configuration
  • Simplifies rolling back a problematic change, since the previous image remains available
  • Pairs naturally with low-disruption upgrade approaches like blue-green switching

Disadvantages / Trade-offs

  • Requires meaningfully more upfront investment in automated image building and configuration as code
  • Demands careful, deliberate design to correctly separate state from the disposable instance
  • Can feel like a significant process change for teams accustomed to directly logging in and patching
  • Troubleshooting an issue sometimes requires understanding the image build process itself, not just the running instance

The upfront-investment-versus-long-term-reliability trade-off

Building the automated pipelines, image definitions, and state-externalization architecture that immutability requires is genuinely more work than simply continuing to patch an existing controller by hand — but that upfront investment tends to pay off substantially over the following months and years, in the form of dramatically reduced drift, faster recovery, and far greater confidence in what’s actually running.

!
Trade-off to Remember

Immutable infrastructure trades a real, upfront cost in tooling and process discipline for a substantial, ongoing reduction in drift, uncertainty, and recovery time — the investment pays off over the long run, but it is a genuine investment, not a free change.

9Security Considerations

Immutability brings genuine security benefits of its own, alongside a few considerations worth planning for deliberately.

Reducing the window for persistent compromise

Because instances are regularly replaced rather than running indefinitely, an attacker who manages to compromise a running instance has a genuinely shorter window before that specific, compromised instance is discarded and replaced with a fresh one built from the trusted, known-good image definition — a meaningful security benefit that comes as a natural side effect of the approach.

Simple Analogy

This is similar to regularly rekeying a building’s locks on a fixed schedule — even if an old key was somehow compromised, its usefulness to an attacker is inherently limited by how soon the locks will next be changed regardless.

Protecting the image build pipeline itself

Because every new instance is built directly from the image and configuration definitions, the automated pipeline responsible for producing that image becomes a genuinely high-value target — an attacker able to tamper with that build process could embed malicious changes into every single future instance built from it, going forward.

ANTI-PATTERN-01 Avoid
Problem

The automated pipeline responsible for building Jenkins’s own machine images is protected with weaker access controls and review requirements than the running Jenkins controller itself.

Why It’s Harmful

An attacker who compromises the image build pipeline can embed malicious changes into every future instance built from it, effectively compromising the entire immutable infrastructure at its source.

Correct Approach

Apply the same rigorous access controls, review requirements, and monitoring to the image build pipeline as to any other critical, production-facing infrastructure.

Externalized state as an ongoing security responsibility

Because credentials and other sensitive data now live on durable, externalized storage independent of any single instance, the security of that specific storage location becomes just as important as the security of the controller itself — the same access-control rigor recommended for backups elsewhere in this guide applies directly here as well.

10Monitoring, Logging, and Metrics

A well-functioning immutable setup needs its own specific kind of ongoing visibility, distinct from monitoring a traditional, long-running instance.

Tracking image build health and success rate

Because every change now flows through the automated image build process, monitoring whether these builds are completing successfully and how long they take becomes a genuinely important operational concern — a broken or excessively slow build pipeline directly delays every future change to the infrastructure it produces.

Metric

Image Build Success Rate

How often the automated image build process completes without error.

Metric

Instance Replacement Frequency

How often controller and agent instances are actually being rebuilt and replaced.

Metric

Time from Change to Live Instance

How long it takes a committed configuration change to actually reach a running, replaced instance.

Metric

Externalized State Consistency

Confirmation that persistent data remains correctly accessible and intact across every replacement.

graph TD
    A[Configuration Change Committed] --> B[Image Build Tracked]
    B --> C[Instance Replacement Tracked]
    C --> D[State Consistency Verified]
    B --> E[Infrastructure Health Dashboard]
    C --> E
    D --> E
        
FIG 2 — Turning the full rebuild lifecycle into ongoing, trackable infrastructure health data

Verifying that state externalization is genuinely working

Periodically confirming, through an actual test replacement, that persistent data survives correctly and completely across an instance rebuild provides genuine, ongoing confidence that the state-separation design is actually functioning as intended, rather than assuming it works simply because it was designed correctly once.

11Design Patterns and Anti-Patterns

A handful of recurring choices separate an immutable setup that delivers on its promise from one that quietly reintroduces the exact problems it was meant to solve.

Pattern: treating the image definition as the single source of truth

Committing to the discipline that the version-controlled image and configuration definition is the only legitimate way to change the infrastructure — with no exceptions for a “quick, one-off manual fix” — is what actually preserves the accuracy and trustworthiness immutability is meant to provide.

Good Pattern: No Manual Exceptions

A platform team enforces, without exception, that even an urgent, seemingly minor fix must go through the same version-controlled configuration and rebuild process as any other change, preserving the accuracy of their infrastructure’s single source of truth.

Anti-pattern: “just this once” manual patching

Making a direct, manual change to a running “immutable” instance during an urgent incident, with the intention of “properly fixing it in the image later,” quietly reintroduces exactly the same configuration drift immutability was adopted to eliminate — and that promised follow-up fix has a well-known tendency to never actually happen.

ANTI-PATTERN-02 Avoid
Problem

During an urgent incident, an administrator makes a direct, manual change to a running instance that’s supposed to be immutable, intending to formalize the fix in the image definition later.

Why It’s Harmful

The running instance’s actual state now silently diverges from its defining configuration, reintroducing exactly the drift and uncertainty immutability was adopted to eliminate — and the promised follow-up update to the image is easily forgotten under ongoing pressure.

Correct Approach

Even under incident pressure, make the fix through the same version-controlled process, accepting a slightly longer time to resolution in exchange for preserving the infrastructure’s genuine accuracy and trustworthiness.

Pattern: keeping image build time reasonably fast

A slow, cumbersome image build process discourages frequent, small changes and tempts exactly the kind of manual shortcut discussed above — investing in keeping the build pipeline itself fast and reliable directly supports the discipline the whole approach depends on.

12Best Practices and Common Mistakes

These are the lessons most teams learn only after either a failed rebuild or a quiet, drift-causing manual fix has already happened.

Best Practice

Enforce No Manual Changes, Without Exception

Route every change, even urgent ones, through the version-controlled build process.

Best Practice

Carefully Identify What Must Be Externalized

Explicitly catalog every piece of state that must survive an instance rebuild.

Best Practice

Keep the Build Pipeline Fast and Reliable

A slow, unreliable build process tempts exactly the shortcuts immutability is meant to prevent.

Best Practice

Regularly Test Actual Replacement, Not Just Theory

Confirm state genuinely survives a real rebuild, rather than assuming the design works.

Common mistake: adopting immutability for compute while leaving state poorly managed

Focusing entirely on making the compute instance itself disposable and rebuildable, while leaving the externalized state’s own backup, security, and durability an afterthought, leaves a genuine, significant gap — the compute layer becomes robust while the actual, irreplaceable data behind it remains just as fragile as before.

i
Helpful Note

Immutability for compute and resilience for state are two related but genuinely distinct concerns — adopting one doesn’t automatically deliver the other, and both deserve deliberate, separate attention.

Common mistake: underestimating the cultural shift required

Teams accustomed to directly logging into a running machine to make a quick fix can find the discipline of always going through a version-controlled rebuild process genuinely uncomfortable at first — investing in clear communication about why this discipline matters helps the transition succeed, rather than quietly eroding under real-world pressure.

13Migrating from Mutable to Immutable Infrastructure

Most organizations don’t adopt immutability overnight — the transition itself deserves a deliberate, staged plan.

Starting with a genuine inventory of the current state

Before building an image definition meant to reproduce a long-running, manually maintained controller, thoroughly documenting exactly what’s currently installed, configured, and running — including whatever undocumented drift has accumulated over time — is an essential, sometimes surprisingly revealing first step.

Simple Analogy

This is similar to conducting a full home inventory before a planned renovation — you can’t accurately plan the new, deliberate design without first genuinely understanding everything that currently exists, including things that were added informally over the years and never properly documented.

A staged, incremental migration path

Rather than attempting to make the entire deployment fully immutable in one large effort, most organizations progress through recognizable stages, building confidence and refining their process at each step before taking on the next, larger challenge.

1

Inventory current state

Document exactly what’s currently installed and configured, including undocumented drift.

2

Make agents immutable first

Begin with build agents, which typically carry less state and are already closer to ephemeral in many setups.

3

Externalize the controller’s state

Move persistent controller data onto durable, independent storage as a prerequisite for making the controller itself immutable.

4

Build and validate a controller image

Create a reproducible image definition, testing it thoroughly in a non-production environment first.

5

Cut over the production controller

Replace the long-running mutable controller with a freshly built immutable instance, connected to the externalized state.

Accepting an imperfect starting point

The very first image built from a long-running, drifted controller likely won’t be a perfect reproduction of that original instance’s exact historical state — accepting this, documenting any deliberate differences, and committing going forward to the discipline of no further manual changes is generally a more practical path than chasing an impossible, perfect initial reproduction.

14Real-World and Industry Examples

Seeing how different kinds of organizations approach immutable Jenkins infrastructure makes the concept concrete.

A Cloud-Native Technology Company

Both agents and the controller are fully immutable, built and deployed entirely through automated pipelines, with persistent state on durable cloud storage — representing a mature, complete adoption of the approach.

A Company in the Early Stages of Adoption

Having successfully made build agents immutable first, the platform team is now working through externalizing the controller’s persistent state as the next deliberate step toward eventually making the controller itself immutable as well.

A Regulated Financial Institution

The image build pipeline itself is treated as a security-critical asset requiring the same rigorous review and access controls as production infrastructure, satisfying audit requirements around the integrity of every deployed instance’s origin.

An Organization Recovering from a Configuration Drift Incident

After a painful outage traced back to years of undocumented manual changes on a long-running controller, the organization commits to a staged migration toward immutability, specifically to prevent the same category of incident from recurring.

A common thread across all four examples

In every case, the organization has recognized that a manually maintained, long-running instance eventually accumulates risk and uncertainty that immutability is specifically designed to eliminate, and each has adopted the approach at a pace and depth matched to its own genuine readiness and risk tolerance.

“An immutable controller doesn’t remember every fix that was ever applied to it — because it never needed to be fixed at all. It was simply replaced.”

15Frequently Asked Questions

Straightforward answers to the questions almost every newcomer to immutable Jenkins infrastructure asks.

Q1Does immutable infrastructure mean I lose my build history every time the controller is replaced?

No — as explained in Chapter 7, persistent data like build history is deliberately externalized onto durable, independent storage, ensuring it survives every replacement of the disposable compute instance itself.

Q2Is it realistic to make an existing, long-running controller immutable, or do I need to start fresh?

A staged migration, as described in Chapter 13, is the typical, realistic path — most organizations begin by inventorying their current state, then progressively work toward externalizing state and building a reproducible image, rather than starting entirely from scratch.

Q3Should I make agents or the controller immutable first?

As discussed in Chapter 6 and Chapter 13, most organizations start with agents, since they typically carry less state and are already closer to ephemeral in many setups, before extending the same discipline to the more complex controller.

Q4Is it ever acceptable to make a quick manual fix directly on a running instance during an urgent incident?

This is a recognized anti-pattern, discussed in Chapter 11 — even under pressure, routing the fix through the same version-controlled process preserves the infrastructure’s accuracy, since a promised “fix it in the image later” often never actually happens.

Q5Does immutable infrastructure improve security on its own?

It provides a genuine benefit by shortening the window an attacker has on any single compromised instance, as discussed in Chapter 9 — but the image build pipeline itself becomes a new, high-value target that needs its own rigorous protection.

Q6What’s the biggest mistake organizations make when adopting this approach?

As covered in Chapter 12, focusing entirely on making compute disposable while neglecting the durability and security of the externalized state itself is a common, significant gap — both concerns deserve deliberate, separate attention.

16Summary and Key Takeaways

Immutable Jenkins infrastructure applies a simple, familiar instinct — throwing away and replacing a broken light bulb rather than repeatedly repairing the same one — to the far more consequential world of a controller and its agents. By defining exactly how an instance should be built through configuration as code and a versioned machine image, and by deliberately externalizing every piece of state that genuinely needs to survive a replacement, an organization eliminates the slow, silent accumulation of undocumented configuration drift that plagues long-running, manually maintained infrastructure. The transition requires genuine upfront investment — building reliable automated image pipelines, carefully identifying and externalizing state, and, most importantly, real organizational discipline to never make an exception for “just this once” manual patching, even under real incident pressure. Organizations that make this investment gain something genuinely valuable in return: infrastructure whose actual, running state can always be trusted to match its documented, version-controlled definition, and a recovery process that’s fast, predictable, and tested, rather than a hopeful reconstruction from memory during an actual crisis.

Key Takeaways

  • Immutability replaces patching with rebuilding — a change results in a new, reproducible instance rather than a manual edit to the running one.
  • It eliminates configuration drift by design — since the running instance is never manually modified, its state can never silently diverge from its defined configuration.
  • State must be deliberately separated and externalized — job configurations, build history, and credentials need to live independently of any disposable compute instance.
  • Adoption is typically staged and incremental — most organizations start with agents before extending immutability to the more complex controller.
  • The image build pipeline becomes a critical, high-value asset — it deserves the same rigorous security and access controls as production infrastructure itself.
  • Discipline is the real cost of this approach — even a single “quick, manual fix” under pressure quietly reintroduces the exact drift the approach was adopted to eliminate.
  • The payoff is faster, more trustworthy recovery — a genuinely reproducible, tested rebuild process replaces a hopeful, memory-dependent scramble during an actual crisis.