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.
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
- Preserve scanner logs, target web/CE/ES/system logs, CI/API evidence, backup ID/checksum and migration timestamps.
- Confirm exact source/target SonarQube versions, edition/release stream, Java/runtime, database, scanner and plugin versions.
- Confirm the documented update path and every required intermediate LTA/year bridge.
-
Confirm the source revision/effective scanner parameters and
preserve
report-task.txt/ceTaskIdwhen upload occurred. - Inspect migration/startup state before project policy.
- Then inspect profiles, gates, New Code, security/analyzer differences, API/CI/IDE/provider integrations.
- Inspect database/search/JVM/host/container resources only when evidence points there.
- 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.
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?
Not automatically. Preserve the log and plugin inventory; repair the target plugin compatibility first if the database migration itself is not the cause.
Why is an old server plus migrated new database an unsafe rollback?
The schema may have changed. Documented rollback restores the pre-update database backup before restarting the previous server.
What should happen when preflight identifies an unsupported path?
Block the update, correct the plan using current path rules/calculator, and rehearse the required hop(s).
Why not change PostgreSQL major, SonarQube, Java and CI at once?
It destroys failure isolation unless those changes are required together and have already been rehearsed as one supported path.
A same-SHA analysis produces different issues after update. What layer do you inspect?
Compare analyzer/rule/profile/mode/update-note changes before changing policy or source.
Official references and version notes
- SonarQube downloads — current Community Build, commercial current release, and current LTA identities.
- Community Build — Determining the update path — direct same-year updates; December/January bridge rules across calendar years; no Community Build LTA concept.
-
SonarQube Server — Release cycle model
— two-month releases, yearly LTA, active-version support model,
and
YYYY.Release.Patchversioning. - SonarQube Server — Determining the update path — intermediate LTA rules and update-path calculator.
- Community Build — Pre-update steps — read every intervening release note, back up the database, test first, and leave database disk headroom for migrations.
- Community Build — Performing the update — fresh installation/image, compatible plugins, configuration review, startup/migration and validation flow.
- Community Build — Post-update steps — scanner verification, database cleanup, service-path updates and API-deprecation review.
- Community Build — Other migration-related tasks — rollback requires restoring the pre-update database backup before switching back to the previous server.
- Community Build — Server host requirements — ZIP installations currently require JDK 21 or 25.
- Community Build — Database requirements — PostgreSQL 14–18 is supported in current Community Build.
- Plugin version matrix — verify every third-party plugin against the target before update.
- Deprecation policy — public APIs/features are deprecated before removal; migration planning must inventory those dependencies.
- SonarScanner CLI 8.1.0.6389 — scanner baseline used for post-update validation.
- Official SonarQube Docker tags — exact source/target image identities used by the rehearsal.
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.
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0Send only Ethereum/ERC-20 compatible assets to this
address.