Chapter 29Lesson 04~130 minutes

Release Cycle, LTA Strategy, Upgrade Paths, and Migration Planning: Diagnostics, Failure Modes, and Production Practices

Diagnose unsupported paths, incompatible plugins, schema rollback mistakes, API deprecations and multi-variable changes without destroying first-failure evidence or downgrading blindly.

Release StrategyLTA / CurrentUpgrade PathsMigrationRollback

Learning objectives

  • Diagnose unsupported update paths before database mutation.
  • Separate startup/plugin failures from schema, scanner, API, CI and project-policy failures.
  • Preserve migration logs, database backup identity, task IDs and deprecation evidence before repair.
  • Reject blind database downgrade, repeated restarts and simultaneous infrastructure changes as troubleshooting shortcuts.
  • Recover with the smallest supported correction and rerun the smallest equivalent validation.

1. Evidence-first diagnostic sequence

  1. Preserve scanner logs, target web/CE/ES/system logs, CI/API evidence, backup ID/checksum and migration timestamps.
  2. Confirm exact source/target SonarQube versions, edition/release stream, Java/runtime, database, scanner and plugin versions.
  3. Confirm the documented update path and every required intermediate LTA/year bridge.
  4. Confirm the source revision/effective scanner parameters and preserve report-task.txt/ceTaskId when upload occurred.
  5. Inspect migration/startup state before project policy.
  6. Then inspect profiles, gates, New Code, security/analyzer differences, API/CI/IDE/provider integrations.
  7. Inspect database/search/JVM/host/container resources only when evidence points there.
  8. Apply the least destructive supported correction and rerun the smallest equivalent rehearsal.

2. Failure: jumping an unsupported path

Broken plan: Community Build 25.9 → 26.9 directly. The current path rule says cross-year updates require the documented year bridge; 2025→2026 has special December/January guidance. The correct response is to stop in preflight and use the current calculator/rule, not “try it and see.”

evidence/broken/path-preflight.txt
BLOCKED: proposed path crosses Community Build calendar year without required bridge release.
source=25.9.0.112764
target=26.9.0.129388
action=consult current update-path calculator/rules; add required bridge hop(s)

3. Failure: treating database migration as downgrade-safe

Once the target has migrated the schema, do not start the old server against that database. A “binary rollback” without database rollback is not the documented recovery model. Preserve the target failure evidence, stop the target, restore the pre-update DB backup into the rollback database, switch to the old server, then start it.

Do not repair migration tables manually. Direct SQL edits to force a schema/version marker are unsupported and destroy evidence. Use backup/restore and documented migration procedures.

4. Failure: incompatible third-party plugin blocks startup

A common startup failure is carrying forward a JAR whose plugin API range no longer matches the target. The evidence belongs in target startup logs and the plugin inventory. Repair by removing or replacing the incompatible plugin in the target deployment, using the current plugin version matrix and preserved provenance; do not copy the entire old plugins directory or downgrade the server reflexively.

symptom: target startup fails while database is reachable
first evidence: target web/sonar startup log + exact plugin JAR checksum
owning layer: plugin compatibility / server extension
least-destructive repair: remove/update only incompatible target plugin
rerun: same target version + same rehearsal DB/restore point as appropriate

5. Failure: production is the first migration rehearsal

If the only backup has never been restored and no staging clone has run the target migration, your maintenance window is performing discovery under outage pressure. Chapter 28's restore drill is a prerequisite: use a recent backup to create a production-like rehearsal database, migrate it, capture duration and disk growth, and run the acceptance suite before scheduling production.

6. Failure: changing server, database, OS and CI simultaneously

If an upgrade also changes PostgreSQL major version, container base OS, Java major, scanner CLI and provider integration, a failure cannot be localized efficiently. Unless a documented target prerequisite forces a dependency change, stage optional modernization separately. When a dependency change is required, make that dependency explicit in the compatibility matrix and test the combined required path in rehearsal.

7. Failure: ignoring deprecation evidence

A green UI says nothing about your automation estate. After update, inspect API deprecation logs/headers and execute contract tests for every endpoint your provisioning, reporting and CI systems use. Migrate documented deprecated APIs before their removal window; never switch to undocumented internal endpoints to avoid updating a client.

8. Failure: keeping obsolete scanners indefinitely

Old scanners can lose support for modern server/runtime expectations. Current scanner guidance favors JRE auto-provisioning where supported; if it is disabled, modern Java is required. Inventory every scanner family—CLI, Maven, Gradle, .NET, NPM/Python integrations—and assign owners. A one-off successful scan does not justify indefinite retention of an unsupported scanner.

9. Causal failure map

Evidence Likely owner Do next
Preflight says required bridge missing Update-path governance Correct plan before any database mutation.
Target never starts; log names plugin Plugin/server startup Validate/remove/update target plugin only.
Target status says migration/setup required Server/database migration Follow documented setup; preserve logs/status.
Server healthy; scanner upload fails Scanner/auth/network/parameters Inspect scanner version, token, URL and effective config.
ceTaskId fails after upload Compute Engine/server analysis Inspect exact CE task/log; do not blame CI exit code alone.
API client gets 404 after update API version/deprecation Compare documented endpoint migration/deprecation.
Issues/gate changed at same SHA Analyzer/profile/mode/policy semantics Compare bundled analyzer/rule/update-note changes.

10. Production shortcuts to reject

  • Do not update production first.
  • Do not repeatedly restart before preserving the first startup/migration error.
  • Do not point the old server at a database already migrated by the new server.
  • Do not manually edit SonarQube schema/search state to fake migration completion.
  • Do not copy old third-party plugin directories blindly.
  • Do not lower quality gates or suppress issues because analyzer results changed after update.
  • Do not disable TLS verification or substitute administrator tokens to make integration tests pass.
  • Do not replace the failing project key to erase history.

Knowledge check

The target startup log names an incompatible plugin. Should you restore the database immediately?

Why is an old server plus migrated new database an unsafe rollback?

What should happen when preflight identifies an unsupported path?

Why not change PostgreSQL major, SonarQube, Java and CI at once?

A same-SHA analysis produces different issues after update. What layer do you inspect?

Next lesson

Prove the complete upgrade checkpoint

Lesson 5 packages path, backup, migration, scanner, ceTaskId, integration and rollback evidence into an auditable update dossier.

Official references and version notes

Version and compatibility note

Rechecked 2026-09-08. Mandatory examples rehearse SonarQube Community Build 26.7.0.124771 → 26.9.0.129388. The current target is Community Build 26.9.0.129388 using official sonarqube:26.7.0.124771-community and sonarqube:26.9.0.129388-community images, PostgreSQL 17.11, and SonarScanner CLI 8.1.0.6389. Both Community Build versions are in calendar year 2026, so the current update-path rule permits a direct update; learners still read the 26.8 and 26.9 release/update notes before execution. Current commercial references are SonarQube Server 2026 Release 4.1 and 2026.1.5 LTA. Community Build has no LTA concept. ZIP-hosted current SonarQube requires Java 21 or 25; the Docker lab uses the image-bundled runtime. Current Community Build supports PostgreSQL 14–18. Recheck exact release notes, target host/database requirements, plugins, scanners, API deprecations, and integrations immediately before any real update.

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.