Chapter 29Lesson 01~130 minutes

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.

Release StrategyLTA / CurrentUpgrade PathsMigrationRollback

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?

Rollback invariant. If the new release migrates the database, rollback is not “start the old image.” The supported high-level rollback is: stop the new server, restore the pre-update database backup, switch back to the previous server version, then start it. Preserve the backup until the new release is accepted.

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.

Update causality
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.

Database headroom. Current pre-update guidance warns that migration tables can temporarily make database usage approach roughly double normal usage, so database disk usage should be below 50% before migration. Measure instead of assuming.

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?

Why can a server update succeed while CI still fails?

What is the safe rollback after the new server has migrated the database?

Why preserve a pre-update ceTaskId?

A same-year Community Build update is direct. Can you skip the intermediate release notes?

Next lesson

Rehearse a real clone-based Community Build update

Lesson 2 turns the release/path model into a real 26.7 to 26.9 Community Build migration rehearsal on a cloned PostgreSQL database.

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.