Chapter 26Lesson 03~125 minutes

Marketplace, Plugins, Extension Risks, and Compatibility Management: Configuration, Design Patterns, and Trade-Offs

Choose deliberately among built-in analyzers, third-party plugins, external issue/report import, and CI tooling while controlling compatibility, licensing, upgrades, failure isolation, and operational ownership.

PluginsSupply chainCompatibilityRollbackOperations

Learning objectives

  • Choose among built-in analyzers, third-party server plugins, external analyzer/report imports, and CI-side tooling.
  • Decide when Marketplace convenience is acceptable and when a manually governed artifact pipeline is preferable.
  • Design pinned plugin inventories and upgrade checks that make SonarQube upgrades reversible.
  • Account for plugin API compatibility, transitive dependencies, license obligations, and scanner-download behavior.
  • Model Data Center plugin consistency separately from single-node Community Build operation.
  • Create a decision record that names the operational owner and exit strategy for every extension.

1. Design principle: prefer the smallest extension boundary that solves the problem

A server plugin is the most tightly coupled option because SonarQube must load and maintain it across server upgrades. If the required capability can be obtained from a built-in analyzer, that usually has the smallest compatibility surface. If an external tool already owns the analysis, importing its report can preserve tool ownership without loading its code into SonarQube. If the capability is orchestration rather than analysis, keep it in CI instead of extending the server.

2. Built-in analyzer vs plugin vs external report vs CI tool

Approach Best when Coupling/risk Rollback
Built-in analyzer Current Sonar product already supports the language/rules you need Lowest third-party server dependency Product/profile/config rollback
Third-party plugin Capability genuinely needs a supported Sonar extension point Server/API/startup and sometimes scanner coupling Remove exact JAR + restart + verify baseline
External analyzer/report Another tool owns detection and SonarQube only needs to display/import findings Report schema/path integration; external rule lifecycle remains external Remove import parameter/report without changing server binaries
CI tooling Task is build/orchestration, evidence generation, or provider automation Runner/image/action dependency rather than SonarQube startup Pin/revert CI dependency independently

3. Marketplace convenience versus manual governance

Community Build Marketplace is useful because it exposes installed plugins, compatible choices, and available updates. It also makes accidental “click and restart” changes easy. A governed environment should still create a change record before the click: exact plugin/version, compatibility evidence, source/release, checksum or signature evidence where available, license, expected capability, maintenance window, baseline, rollback, and owner.

Manual installation makes artifact custody explicit and is required by current commercial SonarQube Server documentation. Manual does not automatically mean safer: downloading a mutable URL without checksum verification is weaker than a well-governed Marketplace workflow. The design goal is evidence and reproducibility, not “UI bad, shell good.”

4. Pin the plugin set as configuration data

Treat installed plugins like a lockfile. The file should be reviewed in the same change as the SonarQube upgrade plan.

sonarqube:
  release: 26.9.0.129388-community
plugins:
  - key: example
    version: 1.2.3
    artifact: sonar-example-plugin-1.2.3.jar
    sha256: "<64-hex-digest>"
    source: "<immutable-release-url>"
    license: "Apache-2.0"
    compatibility_evidence: "current plugin version matrix checked 2026-09-08"
    owner: platform-quality
    required_by:
      - "synthetic-language-fixture"
    rollback: "remove artifact, restart, run baseline smoke checks"

A floating URL such as .../latest/download/plugin.jar is not a lockfile. Neither is a Docker/Helm configuration that downloads unversioned plugins during every startup.

5. Plugin API compatibility is a contract, not a guess

Since SonarQube 9.5 the Plugin API has its own release stream. Plugin metadata can declare a minimum Plugin API runtime version, and SonarSource publishes mappings between SonarQube releases and Plugin API versions. Within a Plugin API major line, forward compatibility is the goal, but an operator should still use the current matrix and plugin release notes rather than extrapolating.

When the SonarQube core release changes, rebuild the compatibility table before the server upgrade. The question is not “did this JAR work last year?” but “does the exact plugin version support the target SonarQube release, and is a maintained upgrade path available?”

6. Transitive dependencies and licenses belong in the review

Plugins can package third-party libraries in their JAR. A plugin’s own license does not automatically describe every bundled dependency. At minimum:

  • review the publisher’s dependency/SBOM information if available;
  • inspect source/build metadata such as Maven dependency trees for an open-source plugin;
  • record licenses and known conflicts relevant to your organization;
  • treat opaque binary-only plugins as a stronger trust decision;
  • re-review dependencies when the plugin version changes.

Do not copy arbitrary JARs into a running service merely because antivirus finds no malware. Dependency risk includes compatibility, licensing, maintainership, and latent vulnerabilities as well as malicious code.

7. Scanner-side optimization can expose dependency mistakes

Current plugin guidance supports Plugin-RequiredForLanguages, which lets SonarQube avoid downloading analyzer/plugin code to scanners that do not need it. Plugins that extend a base analyzer should declare required languages correctly; otherwise a plugin can be downloaded when its base analyzer is absent and fail with dependency/class-loading errors. This is another reason to prefer maintained plugins whose manifests follow current API guidance.

8. Plugin upgrade sequence

  1. Freeze the current server/plugin inventory and preserve checksums.
  2. Read SonarQube target release notes and plugin version matrix.
  3. For each plugin: keep, upgrade, replace with built-in/external integration, or remove.
  4. Test the complete target set on a restored disposable/staging instance—not by copying the production database into an uncontrolled environment.
  5. Run startup, scanner, Compute Engine, and project smoke evidence.
  6. Only then plan the production maintenance change.
Upgrade invariant. Current Community Build update guidance explicitly warns against simply copying old third-party plugins into a new SonarQube home because incompatible or duplicate plugins can cause startup errors.

9. Single node versus Data Center

Concern Single-node Community/Server Data Center
Plugin file placement One application installation/volume Same plugin operation on every application node
Change window Restart that instance Stop all application nodes for install/uninstall/upgrade, then bring back a consistent set
Search nodes N/A Do not install application plugins on search nodes
Evidence One startup/plugin inventory Per-node inventory/checksum + cluster startup health

10. Worked decision table

Need Recommended design Why Observable evidence
Rule already exists in Sonar’s built-in analyzer Use profile/rule configuration No third-party binary needed Active rule/profile + analysis result
External linter already produces SARIF Import external report Keep analyzer ownership outside server Producer version/report + external issue import
Unsupported language requires a mature compatible analyzer plugin Plugin, after full governance gate Real extension point needed Provenance/checksum/compatibility + startup/scanner proof
Task only uploads an artifact to a provider CI integration Not a SonarQube server concern Pinned CI dependency + job artifacts

11. Analysis evidence remains independent of plugin governance

When a plugin participates in analysis, preserve the same chain used throughout this course: scanner process result, report upload, report-task.txt/ceTaskId, Compute Engine completion, analysis result, Quality Gate, CI job status, and provider decoration. A pinned plugin inventory explains which executable extension set produced the result; it does not collapse those states into one success flag.

Knowledge check

Why is an external report often safer than a server plugin?

Does manual installation automatically provide better provenance than Marketplace?

Why should the plugin inventory be reviewed with every SonarQube upgrade?

What problem can Plugin-RequiredForLanguages help avoid?

Is a plugin upgrade a rolling one-node-at-a-time Data Center change?

Next lesson

Diagnose extension failures from preserved evidence

Lesson 4 engineers checksum, startup, dependency, maintenance, and cluster-consistency failures without hiding their first evidence.

Official references and version notes

Version and compatibility note

Rechecked 2026-09-08. Mandatory examples target SonarQube Community Build 26.9.0.129388 using the official sonarqube:26.9.0.129388-community Docker image. Community Build supports Marketplace and manual plugin installation; current commercial SonarQube Server documentation requires manual installation. Third-party plugins are not provided by Sonar and are installed at the operator’s risk. Compatibility must be checked against the current Plugin version matrix and plugin release documentation before every install/upgrade. The checkpoint deliberately chooses the plugin at run time rather than hard-coding a third-party version that may become abandoned. The server image contains its supported Java runtime; outside the image, current Community Build 26.x requires Java 21+. No external database, production cluster, identity provider, reverse proxy, or paid capability is required. Data Center plugin consistency is taught as an optional/simulated commercial path.

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.