Chapter 27Lesson 03200–280 min

Upgrade Planning, Version Support, Breaking Changes, Java Runtime Upgrades, and Rollback Strategy: Configuration, Design Choices, and Tradeoffs

Upgrade strategy is a set of tradeoffs. The right target and execution mode depend on support policy, release risk, availability requirements, runtime ownership, extensions, database/storage topology, and the probability/cost of rollback.

StrategyBundled JavaStandalone vs HAPluginsTradeoffs

Learning objectives

  • Compare latest supported versus conservative supported targets.
  • Choose bundled Java versus an externally managed JVM deliberately.
  • Separate standalone stop-the-world upgrades from Pro/HA rolling upgrades.
  • Decide whether incompatible plugins justify replacement, postponement, or risk acceptance.
  • Design rollback around schema/data mutation rather than binary replacement.
Dated baseline (27 August 2026). Lessons use Nexus Repository 3.95.2-01 as the current reference line and Java 21 as the required runtime family. Always re-check the live version-status and release-note pages before a real change window.
Upgrade is not migration. Replacing Nexus application binaries, migrating a database engine, moving blob storage, and redesigning topology are different changes. Chapter 27 upgrades a supported instance; do not combine unrelated migrations unless the documented path requires them.
No blind downgrade. If a new Nexus version has changed database/data state, do not start older binaries against the upgraded data directory. Rollback means restoring a verified pre-upgrade recovery checkpoint or following an explicit Sonatype-supported procedure.

1. Latest supported versus conservative supported

Choice Benefit Cost/Risk Evidence required
Latest supported Newest fixes/features Less operational soak time Fresh release notes, known issues, format/client regression tests
Conservative supported More field history May defer fixes/features Support-status confirmation and explicit reason not to take latest

“Conservative” must still mean supported. Staying on a sunset line to avoid change simply converts upgrade risk into security/support debt.

2. Bundled Java versus managed external JVM

The bundled runtime minimizes compatibility drift and is the default recommendation for most installations. An external JVM can be justified when the platform has a controlled Java lifecycle, but then the team owns compatibility checks, override variables, CA/truststore behavior, JVM observability changes, and upgrade sequencing.

3. Standalone versus rolling upgrade

A Community/single-node lesson uses a maintenance window: stop, checkpoint, replace binaries/container image, start, migrate/rebuild, validate. Rolling/zero-downtime upgrade is an HA capability and has mixed-version rules, database-finalization semantics, and supported path limits; it is not “start two independent Community servers and upgrade one at a time.”

4. Plugin removal versus delayed upgrade

Community plugins are not supported by Sonatype. If a plugin blocks a supported upgrade, evaluate the business function it provides. Often the long-term answer is supported REST/UI automation or product functionality, not pinning Nexus indefinitely. If postponement is unavoidable, document owner, expiry, security exposure, and replacement plan.

5. Database and blob topology

An upgrade should preserve the existing supported database/blob topology unless the documented version gate specifically requires change. Combining Nexus version, database engine, blob backend, reverse proxy, and identity-provider changes increases the number of possible failure causes and weakens rollback clarity.

6. S3-compatible object stores require version-aware testing

Earlier 3.87.x release notes changed the AWS SDK generation used by Nexus and warned that non-AWS S3-compatible implementations can be affected. This is the pattern to learn: a Nexus version can be compatible with “S3” in general while a specific third-party S3 implementation breaks. Rehearse real APIs against a disposable equivalent rather than trusting a label.

7. Rollback probability versus schema/data changes

Before the target writes or migrates persistent state, rollback may be as simple as aborting and keeping the source untouched. After persistent mutation, rollback cost rises because a coherent restore is required and post-cutover writes may have to be replayed. Set the go/no-go decision point before irreversible change.

8. Worked scenario

Fact Decision
Single-node Community, 3.84.x, H2, file blob Planned maintenance-window upgrade
Custom CA in system Java truststore Re-provision CA for bundled Java 21 and test proxy/LDAP TLS
One unsupported plugin Replace/remove before production upgrade
Crosses 3.85 Schedule and observe repository-search rebuild
Rollback requirement < 30 min Pre-stage verified restore procedure and keep source checkpoint immutable

9. Production policy template

upgradePolicy:
  target: latest-supported-after-rehearsal
  require:
    - release-notes-reviewed
    - crossed-thresholds-evaluated
    - backup-restorable
    - plugins-compatible-or-removed
    - java-and-truststore-validated
    - database-and-blob-supported
    - format-client-smoke-tests
  rollback:
    method: restore-pre-upgrade-checkpoint
    forbid: start-old-binaries-on-upgraded-data

Knowledge check

Why is “conservative” not permission to stay on an unsupported release?

When is rolling upgrade relevant?

Why avoid combining blob migration with an ordinary version upgrade?

What is the preferred treatment of an unsupported plugin?

Why can an S3-compatible backend still need rehearsal after a Nexus upgrade?

Summary and next step

Good upgrade design reduces simultaneous variables, keeps unsupported extensions out of the critical path, and aligns target choice, runtime ownership, availability mode, and rollback mechanics with observable state.

Lesson 4 now diagnoses what happens when those assumptions fail.

Official references and version notes

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
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.