Chapter 39Lesson 01~210 minutes

LTS Upgrades, Java Runtime Transitions, Plugin Upgrade Strategy, Compatibility Testing, and Rollback Planning: Concepts, Architecture, and Mental Model

A Jenkins upgrade is not one package replacement. It is a compatibility migration across controller core, Java, plugins, persisted state, agents, Pipelines and external integrations, with evidence gates at every boundary.

LTSJava 21pluginscompatibility graphcanaryrollback

Learning objectives

  • Model an upgrade as a compatibility graph rather than a single version jump.
  • Separate core, Java, plugin, configuration, agent/Remoting, Pipeline and external-integration state.
  • Explain why every skipped LTS upgrade guide matters.
  • Define acceptance, rollback and forward-fix gates before changing production state.
  • Build an evidence chain that proves what was tested and what actually changed.

1. The practical problem: “Jenkins upgraded successfully” is too vague

A controller process can start on the new core while important jobs are broken. Plugins can load while one authentication integration fails. A Pipeline can compile while an old agent JVM can no longer connect. A smoke job can pass while production Shared Libraries or artifact publication fail. Upgrade engineering therefore asks a stricter question: which compatibility boundaries were changed, which representative behavior was verified, and what recovery path remains valid?

The safest upgrade plan is written before the maintenance window. It contains a current inventory, target compatibility graph, all intervening upgrade notes, a validated backup or clone, representative tests, agent and integration checks, explicit cutover criteria, and a rollback decision that does not depend on downgrading mutated data in place.

2. Mental model: from inventory to accepted upgrade

Mental model: from inventory to accepted upgrade
flowchart TD
  A["Current core / Java / plugins / config / agents"] --> B["Target compatibility graph"]
  B --> C["Read every skipped LTS guide + advisories"]
  C --> D["Backup / isolated clone"]
  D --> E["Stage Java + core + plugin changes"]
  E --> F["Smoke + Pipeline + security tests"]
  F --> G["Agent / Remoting + integrations"]
  G --> H{"Acceptance gates"}
  H -->|pass| I["Cutover / monitor"]
  H -->|fail| J["Rollback from known-good snapshot or forward-fix"]
  I --> K["Record accepted baseline"]
  J --> K
  

Each arrow changes or validates a different layer. The model prevents a common failure pattern: upgrading core and every plugin at once, seeing an error, and having no reliable way to identify which compatibility edge failed.

3. State inventory before mutation

Layer Record before upgrade Why it matters
Controller core Exact LTS version, install method, startup flags, controller identity Determines applicable upgrade guides and rollback artifact.
Jenkins runtime Controller Java vendor/version; agent Java versions Core may require a newer JVM even when application builds still use an older JDK.
Plugins Short name, version, dependencies, health/security notices, minimum core Plugins are executable controller dependencies and can block or change upgrade behavior.
Configuration JENKINS_HOME state, JCasC source/revision, system properties Persisted XML/plugin data and code-managed configuration can both affect startup.
Pipelines/libraries Representative job full names, Jenkinsfile SHAs, Shared Library refs Compatibility must be proven with real execution patterns, not controller startup alone.
Agents Node name, launcher, Remoting/JVM, labels, OS/arch, image digest A new controller may reject an old Java runtime or expose launcher incompatibility.
External integrations SCM, IdP, artifact repo, secret provider, webhooks, TLS trust External APIs/plugins can fail independently of Jenkins core.
Recovery Backup ID/checksum, restore test, old image/package, RPO/RTO Rollback is credible only if the recovery artifact is known-good and restorable.

4. Why skipped LTS guides are part of the dependency graph

The Jenkins LTS guide states that each x.y.1 section describes the transition from the previous LTS line. If you skip lines, you still inherit the intermediate behavioral changes. For example, crossing into 2.555.1 introduces the Java 21-or-25 requirement for both controller and agent JVMs. Jumping directly to 2.568.3 does not erase that requirement; it merely makes the failure appear later if you failed to plan for it.

Read notes in chronological order and convert each material item into a checklist entry: runtime prerequisite, removed/deprecated behavior, image/platform change, security hardening change, plugin expectation, or operational migration.

5. Jenkins runtime Java is not your build JDK

Jenkins 2.555.1+ requires Java 21 or 25 to run the Jenkins system. This includes controller and agents. Your application may still compile with Java 8, 11 or 17 on the agent using a separately selected build JDK. Conflating those two Java roles is a common upgrade mistake.

Java role Example after upgrade Owner
Controller JVM Java 21 runs jenkins.war Platform team
Agent JVM / Remoting Java 21 runs the Jenkins agent process Platform/agent image team
Build JDK Project may select JDK 17 for compilation Application pipeline/toolchain
CLI JVM Java 21/25 when running current Jenkins CLI components Operator automation

6. Plugins turn the upgrade into a graph

Plugins depend on Jenkins core and on other plugins. A plugin update can introduce a higher minimum core version; a core update can expose an old plugin incompatibility. Security advisories can also supersede a version you considered acceptable yesterday. Therefore maintain a manifest and review dependencies/security notices as a set, not as isolated “update available” badges.

7. Define success as gates, not a green homepage

Gate Evidence Failure action
Controller startup No startup migration/plugin errors; exact core/Java recorded Stop before job traffic; preserve logs.
Security/auth Expected login, authorization denial, CSRF/TLS behavior Rollback/repair auth plugin/config before users return.
Pipeline smoke Representative Declarative/Scripted/library jobs pass Identify core/plugin/library layer.
Agents Each critical pool connects with supported JVM/Remoting Hold cutover; update agent image/runtime.
Artifacts/SCM Checkout, publish, status/webhook path succeeds Repair integration plugin/API/TLS trust.
Performance Queue/build/controller metrics remain within baseline envelope Investigate regression before acceptance.
Recovery Known-good snapshot remains restorable until acceptance Do not destroy rollback source early.

8. Common wrong mental models

  • “Latest everything is safest.” Security currency matters, but changing core, Java and all plugins simultaneously destroys fault isolation.
  • “If Jenkins starts, the upgrade worked.” Startup proves only a subset of compatibility.
  • “We can always downgrade.” Plugin/core data migrations may make in-place downgrade unsupported or unsafe; restore a pre-upgrade snapshot instead.
  • “Agents are independent.” The agent JVM is part of the Jenkins runtime support matrix.
  • “JCasC means backup is unnecessary.” JCasC does not contain all controller state, secrets/keys, build history or plugin data.
Next

Build and rehearse the staged upgrade

Lesson 2 turns this model into a disposable controller workflow with inventory, backup, skipped-guide review, controlled upgrade, acceptance tests and a rollback rehearsal.

Knowledge check

Answer before revealing the explanation.

1. Why is an upgrade a compatibility graph?

2. Why read all skipped LTS guides?

3. Can an application still build with JDK 17 after Jenkins moves to Java 21?

4. What does successful controller startup prove?

5. Why is snapshot restore safer than naive downgrade?

Official references and version notes

Upgrade behavior is version-specific. Always read every skipped LTS guide and the current security advisories for the exact day you plan an upgrade.

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.