Chapter 03Lesson 03~90 minutes

JENKINS_HOME, Filesystem Layout, Controller Configuration, System Settings, Tools, and Global Properties: Configuration, Design Choices, and Tradeoffs

Choose between UI-managed and configuration-as-code state, global and agent-local tools, full and selective backups, and controller-local versus external durable services.

Design tradeoffsJCasC previewToolingBackup scopeExternal state

Learning objectives

  • Compare UI-managed controller configuration with configuration-as-code ownership without prematurely turning Chapter 03 into a JCasC tutorial.
  • Decide when tools belong in global Jenkins configuration versus immutable agent/container images.
  • Choose between full-home and selective backup strategies based on recovery objectives, size, consistency, and exact-version requirements.
  • Separate controller-local durable state from external systems that Jenkins references but does not own.
  • Use a decision record that states source of truth, side effects, rollback, evidence, and operational prerequisites.

1. The governing design question: who owns this state?

Jenkins can persist a setting through the UI, load supported configuration from JCasC, generate jobs from Job DSL, discover repositories from SCM, download tools, archive build outputs, and invoke external systems. These mechanisms are not interchangeable. A maintainable controller gives each important state one accountable source.

Design rule: avoid competing configuration owners. If JCasC owns a setting, a manual UI edit may be overwritten on reload. If an external artifact repository owns release binaries, do not treat a Jenkins workspace copy as the canonical package.

2. UI-managed versus configuration-as-code state

Dimension UI-managed state Configuration as code
Learning curve Immediate and discoverable. Requires schema/tooling and disciplined review.
Reviewability Needs audit/change process around administrator actions and backups. SCM diff/review can become the desired-state record.
Reproducibility Depends on snapshots, documentation, and manual replay. Strong for supported settings when code, plugin versions, and secrets references are pinned.
Drift Easy to accumulate unnoticed manual changes. Can overwrite UI drift if reload/restart applies desired state.
Recovery Restore controller files or replay documented changes. Reapply desired state, but still restore data not represented by configuration code.

Chapter 26 teaches JCasC in depth. Here, the important point is architectural: JCasC is a configuration source for supported controller/plugin state, not a substitute for plugin binaries, all job/build history, encrypted credential records, or validated backups.

3. Globally configured tools versus agent/container-local tools

Manage Jenkins → Tools can define JDK, Git, Maven, and other plugin-provided tools. That can be convenient, but the build still executes on an agent. The agent must be able to receive/use the tool, and its OS/architecture/network policy matter.

Global tool definition

Central name and installation/provider configuration. Useful when jobs refer to a stable logical tool name.

Agent-baked toolchain

Tool versions are part of an image/VM template. Strong when agents are immutable and image digests are controlled.

Pipeline provisioned tool

Pipeline/tool steps install or select versions at execution time. Flexible, but network and cache behavior affect repeatability.

External package manager

Language/package ecosystem resolves versions from lockfiles and registries. Jenkins orchestrates; it does not become the package manager.

For production reproducibility, record both the logical Jenkins tool configuration and the actual tool version observed on the executing agent. A name like “Maven-3” is intent; mvn --version on the agent is execution evidence.

4. Full-home versus selective backups

A full JENKINS_HOME snapshot is straightforward and minimizes the chance of omitting obscure plugin state. It can also be large because build records, artifacts, tools, caches, and plugin expansions accumulate. Selective strategies reduce size but increase the burden of proving the restore recipe.

Strategy Strength Risk / cost Use when
Consistent full-home snapshot Simple recovery model; preserves obscure state. Large; sensitive; must protect keys separately and manage retention. Small/medium controller or strong snapshot/storage tooling.
Config + jobs + required records Smaller, faster. Restore depends on exact documented exclusions and plugin/tool reconstruction. Large controller with mature automation and tested DR.
Configuration-as-code + data backup Reviewable desired state plus targeted historical data. Not every plugin/data surface is declarative; secrets and histories remain. Platform-managed Jenkins with strong SCM/release discipline.
Rebuild controller, preserve external systems only Very small controller state. Usually loses history and may not preserve plugin/job behavior exactly. Only when controller truly is disposable and required records live elsewhere.

RPO and RTO drive the choice. If build history is audit evidence, it has recovery value. If archived release artifacts are also published immutably to a repository, Jenkins copies may be lower priority. Document these assumptions explicitly.

5. Controller-local files versus external durable services

Jenkins frequently stores a reference to an external thing: an SCM URL, credential ID, registry endpoint, artifact repository, Kubernetes cluster, cloud account, or SonarQube server. The external system owns its own data and availability.

Controller-local files versus external durable services
flowchart TD
  A[JENKINS_HOME: job + credential reference] --> B[Jenkins build]
  B --> C[SCM commit]
  B --> D[Artifact repository package/digest]
  B --> E[Cloud/Kubernetes deployment]
  A --> F[Controller backup]
  C --> G[SCM backup/retention]
  D --> H[Repository retention/DR]
  E --> I[Provider state/DR]

A Jenkins restore can recover the job that says “deploy package X,” but it cannot recreate package X if the artifact repository lost it. Recovery plans must therefore map cross-system dependencies.

6. Restart, reload, and live state are different operations

A controller restart stops the process and rebuilds runtime state from disk and external sources. Some configuration mechanisms can reload selected state, while plugins may have their own semantics. Raw filesystem edits while Jenkins is running are dangerous because in-memory objects may later serialize over those edits, or Jenkins may not notice them until a reload/restart.

Later chapters cover JCasC reload and upgrade/restart planning. In this chapter, choose the least surprising rule: change through supported interfaces; if low-level filesystem repair is unavoidable, stop the controller, snapshot first, edit only documented state, preserve the original, and validate startup on an isolated copy.

7. Worked decisions

Scenario Preferred design Evidence Rollback
20 ephemeral Linux agents need identical Maven Versioned agent image with Maven baked in; Jenkins label/tool naming can express intent. Image digest + mvn --version in build. Redeploy previous image digest.
Small training controller changes its banner UI-managed System Message is adequate. UI + persisted safe excerpt + backup snapshot. Revert in UI or restore previous config.
Enterprise controller requires reviewable global settings JCasC for supported settings plus plugin/core baselines and backups. SCM commit + JCasC validation + controller state. Known-good bundle/config plus controller recovery plan.
Release artifacts consume most controller disk Publish immutable release artifacts to a dedicated repository; define Jenkins retention. Repository digest/version + build/source link. Repository retention/restore; do not rebuild silently.

8. Security and least-privilege implications

  • Filesystem read access to JENKINS_HOME is highly privileged; it can expose job configuration, tokens, keys, histories, and plugin data.
  • Backup systems become part of the Jenkins trust boundary. Encrypt them, restrict readers, and separate recovery keys.
  • Tool auto-installation expands network and supply-chain dependencies; pin versions and trusted sources where practical.
  • Do not grant agents broad controller filesystem access. Controller isolation is a security boundary, not a performance preference.
  • Document who may change System, Tools, plugin versions, configuration code, and restore procedures.

9. Design challenge

A team has one controller, 80 repositories, ephemeral Kubernetes agents, a Nexus repository, and JCasC in Git. Build logs must be retained 90 days; release packages must be retained seven years. Propose which state belongs in:

  1. JCasC/SCM,
  2. controller backup,
  3. agent image/template,
  4. Nexus,
  5. separate secret-key recovery storage.

For each choice, state the source of truth, the minimum recovery evidence, and what a Jenkins restore cannot recover automatically.

10. Summary

  • Configuration ownership matters more than configuration location.
  • UI, JCasC, Job DSL, tools, agent images, and external repositories solve different problems.
  • Backup scope trades storage/consistency cost against recovery complexity.
  • External systems retain their own durable state; Jenkins stores references and automation around them.
  • Low-level filesystem repair should be exceptional, stopped-controller work with snapshots and validation.
Next lesson

Diagnostics, Failure Modes, Security, and Performance

Apply the state model to real failure patterns: live XML edits, missing recovery keys, controller-disk growth, workspace confusion, and wrong filesystem ownership.

Knowledge check

Why can JCasC and a full controller backup both be necessary?

What is wrong with assuming a global Maven tool name proves the Maven version used by a build?

When does a selective backup become more dangerous than a full snapshot?

Can restoring Jenkins recreate a deleted Nexus package?

Why is live editing of internal XML a poor routine configuration mechanism?

Official references and version notes

Version and compatibility note

Version-sensitive statements were rechecked on 2026-09-14. The disposable baseline continues Chapter 02 with Jenkins 2.568.3 LTS on Java 21 using the official jenkins/jenkins:2.568.3-jdk21 image. Jenkins and plugins evolve; regenerate the storage map from the actual controller, keep plugin-specific files opaque unless the plugin documents them, and re-check backup/security guidance before applying the patterns to a production controller.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this address.