Release Cycle, LTA Strategy, Upgrade Paths, and Migration Planning: Core Concepts and Mental Model
Treat a SonarQube update as a versioned migration across server, database, Java, scanners, plugins, APIs and integrations, with path, backup and rollback decisions fixed before change.
Learning objectives
- Distinguish Community Build calendar releases from SonarQube Server current/LTA release streams.
- Model an update as a migration across server binaries/images, database schema, Java/runtime, plugins, scanners, APIs and integrations.
- Determine whether a direct update is supported or an intermediate release/LTA is required before touching production.
- Define the backup and rollback boundary so an older server is never started against a database already migrated by a newer release.
- Build a read-only compatibility inventory covering source/target versions, database, plugins, scanners, APIs, CI, IDE and credentials.
-
Preserve revision,
report-task.txt,ceTaskId, migration logs and post-update task evidence as independent facts.
1. The practical problem: an update is not “replace the container tag”
Chapter 28 established that SonarQube disaster recovery starts from the durable database and a tested restore. That recovery discipline becomes the safety boundary for every update. A new SonarQube version can change the database schema, embedded Elasticsearch representation, bundled analyzers, Java requirements, plugin compatibility, Web API behavior and integration expectations. Replacing one binary or image therefore changes several coupled systems even if your project source code does not move.
A production update is reproducible only when you can answer, before the maintenance window: what version am I on, which release stream am I following, what exact path is supported, what database backup proves my rollback point, which plugins/scanners/APIs/integrations are compatible, and what post-update evidence will make me accept the migration?
2. Two release models you must not mix
SonarQube Community Build uses calendar versioning
such as 26.9.0.129388. It has no LTA concept.
Current path rules allow direct updates between versions in the same
year; moving across years normally requires the December bridge
release, with the documented January 2026 exception available
because of known December 2025 issues.
Commercial SonarQube Server uses
YYYY.ReleaseNumber.Patch, publishes a release about
every two months, and designates one yearly
Long-Term Active (LTA) release. The current release
stream is 2026 Release 4.1; the current LTA is 2026.1.5. Server path
rules require every LTA that lies in an update path.
| Question | Community Build | Commercial Server |
|---|---|---|
| Current reference | 26.9.0.129388 | 2026 Release 4.1; 2026.1.5 LTA |
| LTA? | No | Yes, yearly |
| Path rule | Same-year direct; use documented year bridges when crossing years | Traverse required intermediate LTAs; latest LTA → latest non-LTA can be direct |
| Primary operator evidence | Release notes + update-path rule + target requirements | Release/LTA status + calculator + every update note + target requirements |
3. Mental model: compatibility inventory → rehearsal → migration → proof
The update starts with the current release and all attached dependencies. The supported path and update notes define the sequence. A protected database backup creates the rollback point. A staging rehearsal proves that the target can migrate a copy of the database. Only then should the production server change. After startup, representative scanner, API, CI and IDE checks prove that the new server is usable rather than merely reachable.
flowchart TD
A[Current release/LTA + compatibility inventory] --> B[Supported update path]
B --> C[Read every intervening update note]
C --> D[Protected DB backup + rollback manifest]
D --> E[Staging rehearsal on cloned DB]
E --> F[Target server migration]
F --> G[Plugin + scanner + API + CI/IDE validation]
G --> H[Fresh analysis + report-task.txt + ceTaskId]
H --> I{Acceptance criteria met?}
I -->|Yes| J[Accept target and retain evidence]
I -->|No| K[Stop target + restore backup + previous server]
4. State map before change
| Layer | Record before update | Why it matters |
|---|---|---|
| Source/revision | Representative Git SHA(s), project key, branch/main context | Lets post-update analysis compare the same source population. |
| Server | Exact source/target version, edition, install type, image digest if used | Defines supported path and migration behavior. |
| Runtime | Java/runtime, OS/container architecture, host limits | Target may change host/runtime requirements. |
| Database | Vendor/version, size/free space, backup ID/checksum, JDBC settings | Schema migration is the principal irreversible state change until backup restore. |
| Plugins | Key/version/JAR checksum/source/license/target compatibility | An incompatible plugin can block startup. |
| Scanners | CLI/build scanner versions, JRE auto-provisioning state | Old scanners may become unsupported even when the server starts. |
| APIs/integrations | Endpoints, deprecated calls, webhooks, CI action/plugin versions, IDE versions | Automation can fail independently of server health. |
| Policy | Profiles, gates, new-code definition, instance mode | Analyzer/rule changes can change findings without source changes. |
| Evidence |
Last known good ceTaskId, gate state, system
health, logs timestamp
|
Creates a pre-update comparison point. |
5. Read-only inspection first
# Server state
curl -fsS "$SONAR_HOST_URL/api/system/status" | tee evidence/pre/system-status.json
# Scanner/runtime
sonar-scanner --version | tee evidence/pre/scanner-version.txt
java -version 2>&1 | tee evidence/pre/java-version.txt
# Exact repository revision used for representative validation
git rev-parse HEAD | tee evidence/pre/revision.txt
# Installed plugin inventory (requires suitable API permission on your instance)
curl -fsS -H "Authorization: Bearer $SONAR_API_TOKEN" \
"$SONAR_HOST_URL/api/plugins/installed" > evidence/pre/plugins.json
# PostgreSQL identity and size/headroom evidence (run with authorized DB account)
psql "$SQ_DB_URL" -Atc 'show server_version;' | tee evidence/pre/postgres-version.txt
psql "$SQ_DB_URL" -Atc "select pg_size_pretty(pg_database_size(current_database()));" \
| tee evidence/pre/database-size.txt
Also inventory the deployment source: Compose/Helm values, systemd unit, Kubernetes manifests, environment-variable names, secret references, proxy/TLS settings, and any manually installed JARs. Do not dump secret values into the evidence packet.
6. Determine the path before choosing the maintenance window
For this chapter's executable Community Build lab,
26.7.0.124771 → 26.9.0.129388 is a same-year direct
update. Direct does not mean “skip documentation”:
read the 26.8 and 26.9 release/update notes and validate all target
requirements. A cross-year Community Build update uses a different
path rule. Commercial Server uses the LTA-aware calculator and
requires intermediate LTAs when they lie between source and target.
7. Backup ID and rollback decision point
A backup is part of the update transaction. Record its timestamp, database identity, vendor-tool command, size and checksum, and prove a restore rehearsal before production. Define the point of no simple return: once the new server migrates the database, the old server must not be pointed at that migrated schema.
backup_id: sq29-20260908T120000Z
source_version: 26.7.0.124771
source_database: sq29_source
backup_sha256: <recorded checksum>
target_version: 26.9.0.129388
rollback_trigger: validation checklist fails before acceptance
rollback_action: stop target -> restore backup -> switch old server -> start old server
never_do: start old server against migrated target database
Knowledge check
Does Community Build 26.9 have an LTA designation?
No. Community Build uses calendar releases and has no LTA concept. LTA belongs to commercial SonarQube Server.
Why can a server update succeed while CI still fails?
Server startup, scanner compatibility, Web API behavior, CI actions/plugins, credentials and gate enforcement are separate layers.
What is the safe rollback after the new server has migrated the database?
Stop the new server, restore the pre-update database backup, switch back to the previous server version, then start it.
Why preserve a pre-update ceTaskId?
It gives an exact last-known-good asynchronous analysis task to compare with the post-update task instead of relying on screenshots or scanner exit status.
A same-year Community Build update is direct. Can you skip the intermediate release notes?
No. Direct refers to installed hops, not documentation. Current guidance says to read the release/update notes between source and target.
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.