Chapter 25Lesson 01~145 minutes

Plugin Ecosystem, Plugin Dependencies, Update Center, Compatibility, Pinning, Removal, and Plugin Governance: Concepts, Architecture, and Mental Model

Jenkins plugins execute inside the controller and can change its APIs, persistence model, UI, security surface and Pipeline behavior. This lesson builds a precise mental model for provenance, dependency resolution, minimum-core compatibility, update-center metadata, security advisories, restart/load semantics and rollback evidence before any plugin is changed.

PluginsUpdate CenterDependenciesCompatibilitySecurityGovernance

Learning objectives

  • Explain why a plugin is privileged controller code rather than just another Pipeline dependency.
  • Trace capability → update-center metadata → dependency graph → minimum core → loaded extension state.
  • Separate plugin archive/version identity from plugin-owned configuration and runtime state.
  • Use read-only inspection before installation, update, disable or removal.
  • Define a governance evidence set that makes plugin changes reviewable and recoverable.

1. The practical problem: a plugin change can change the whole controller

Jenkins is intentionally extensible. Credentials stores, SCM integrations, Pipeline steps, authorization strategies, cloud agents, report publishers and UI features are commonly delivered by plugins. That convenience creates a platform-management obligation: plugin code loads into the controller JVM, participates in startup, can persist configuration, contributes extension points and can affect every job that uses those extensions.

Therefore, “install plugin X” is not equivalent to adding an application library. Before mutation, operators need to know which artifact, from which update source, for which Jenkins core, with which transitive dependencies, whether there is a current security warning, and what exact snapshot would restore the accepted state.

2. Mental model: from capability request to governed runtime

The causal chain is: requested capability → plugin/update-center metadata → dependency graph and minimum Jenkins core → reviewed archive set → install and possible restart → runtime extension points and plugin-owned data → later update/security advisory → tested retirement or rollback.

Mental model: from capability request to governed runtime
flowchart TD
A[Required capability] --> B[Plugin short name + update-center metadata]
B --> C[Dependency graph + minimum core]
C --> D[Review provenance, health, advisories]
D --> E[Stage exact plugin set on clone]
E --> F[Restart / load extensions]
F --> G[Jobs, config and persisted plugin data]
G --> H[Update / advisory / retirement event]
H --> I[Test upgrade, disable or restore]
I --> J[Manifest + logs + snapshot evidence]

Capability → metadata: begin with the outcome you need, not a familiar plugin name. Metadata → graph: one plugin may require several others at minimum versions. Graph → install: compatibility must be resolved against the controller core before files reach JENKINS_HOME. Install → runtime: a plugin is not useful merely because its .jpi exists; Jenkins must load it and its dependencies successfully. Runtime → data: jobs and controller configuration may then contain plugin-defined classes/settings. Update/retirement → evidence: later changes must account for both binaries and persisted data.

3. State that must remain distinct

Layer Examples Evidence
Controller/core Jenkins 2.568.3, Java 21, JENKINS_HOME About page, startup log, image digest
Plugin artifact short name, version, .jpi, SHA-256 Installed list, filesystem hash
Resolution metadata Update Center, minimum core, required/optional dependencies update-center/plugin-site metadata
Runtime extension state loaded/disabled/failed, contributed descriptors/steps Plugin Manager + startup log
Plugin-owned data job XML, global config, credentials/provider settings snapshot + configuration inventory
Security/maintenance advisory, health score, maintenance status security advisory + plugin page timestamp
Recovery previous manifest/image/JENKINS_HOME snapshot hash, restore test and owner

A controller can have the plugin file present but disabled; it can have a candidate plugin version compatible with core but incompatible with another plugin; and it can boot after uninstall while preserving unrecognized old configuration. Those are different states.

4. Read-only inspection comes first

Before changing anything on the disposable controller, record:

# Host-side evidence for the disposable lab only
docker image inspect jenkins/jenkins:2.568.3-lts-jdk21 \
  --format '{{json .RepoDigests}}'
docker logs ch25-jenkins 2>&1 | head -n 80

# After local setup, inspect Installed/Updates in Manage Jenkins → Plugins.
# If using authenticated local CLI with a fake lab token:
java -jar jenkins-cli.jar -s http://127.0.0.1:8080 \
  -auth lab-admin:LAB_ONLY_TOKEN list-plugins

Do not print real API tokens in shared terminals or logs. The example token is synthetic; an actual lab token should be stored locally and passed through a protected variable/file.

5. Update Center is a resolver input, not a blind approval oracle

The default Jenkins update site publishes metadata and binaries. Jenkins adds its core version to update-site requests so normal version-specific metadata can avoid offering releases that require a newer core. That is a compatibility aid, not a guarantee that an update is safe for your jobs or plugin-owned data.

Experimental update centers intentionally expose alpha/beta releases and may offer versions incompatible with your controller. They do not belong in a routine production update path.

6. Dependency graphs: direct and transitive

As a concrete example, Dark Theme 652.vea_da_dfea_e769 requires Theme Manager ≥ 327.v780d7096ec29. The current Theme Manager release in turn requires API plugins such as Ionicons API and Jackson 3 API. Installing “one” feature therefore changes a graph.

Required dependencies affect boot/load viability. Optional dependencies may activate integration behavior when present. Jenkins also documents implied dependencies created historically when features were detached from core. Never decide removal from a direct-plugin list alone.

7. Minimum core is a hard compatibility gate

A plugin release can require a newer Jenkins core than your controller. For this chapter, Dark Theme 652 requires Jenkins 2.528.3 and Theme Manager 346 requires Jenkins 2.504.3, both below the 2.568.3 lab core. If a candidate required 2.580.1, the correct result on this controller would be reject before installation, not “try it and see.”

8. Security advisories and health scores answer different questions

Jenkins security advisories identify specific affected/fixed versions. The 2 September 2026 advisory is a current example: it fixed Jenkins core in 2.568.3 and also named fixed plugin versions for several plugins. A plugin health score is useful maintenance metadata, but Jenkins documents that the score reflects current/latest plugin data and is not a security attestation for your installed historical release.

9. “Pinning” today means reproducible desired state

Modern controller governance should store explicit plugin versions in a reviewed manifest or controller image, then test the resolved dependency set. Do not confuse this with the old bundled-plugin .jpi.pinned mechanism; Jenkins documentation states that pinned plugins as a product feature were removed with Jenkins 2.0.

Plugin Installation Manager nuance: its --latest option defaults to true. If exact minimum/pinned dependency behavior is required, use an explicit strategy such as --latest=false, inspect the resolved set, and promote the exact tested manifest rather than relying on future “latest” resolution.

10. Product boundary

A plugin is justified when Jenkins truly needs controller extension points or a maintained integration. A compiler, linter, package client or deployment CLI that can run on a trusted agent usually belongs outside the controller. Keeping work agent-side reduces controller attack surface, classpath complexity and plugin lifecycle obligations.

11. DevOps connection: provenance + compatibility + recoverability

A reproducible Jenkins automation path now includes not just source SHA and build number, but also the plugin runtime that interpreted the job. Critical build evidence should be attributable to a controller/core/Java/plugin baseline. That baseline becomes part of incident diagnosis, upgrade approval and disaster recovery.

Next lesson

Guided Hands-On Workflow and Core Operations

Inventory a disposable controller, trace a small dependency graph, stage a maintained plugin change in a clone, test disable/removal behavior, and export an exact manifest.

Knowledge check

Answer before revealing the explanation.

1. Why are Jenkins plugins more privileged than ordinary Pipeline code?

2. What does the Update Center contribute to a plugin decision?

3. Why is a plugin short name important?

4. What is the modern meaning of “pinning” in this course?

5. Why is an old plugin archive alone not a complete rollback plan?

Official references and version notes

Verified baseline — 17 September 2026. Labs use Jenkins 2.568.3 LTS with Java 21; Jenkins 2.568.3 is tested with Java 21 and 25. The disposable controller image is jenkins/jenkins:2.568.3-lts-jdk21; record its platform-specific digest before execution. Dark Theme is 652.vea_da_dfea_e769 (requires Jenkins 2.528.3) and requires Theme Manager ≥ 327.v780d7096ec29; current Theme Manager is 346.v06cca_64c6a_37 (requires Jenkins 2.504.3). Current upstream Plugin Installation Manager Tool is 2.15.0; verify the exact jenkins-plugin-cli --version bundled in the selected controller image. Re-check all of these before reuse because plugin releases, dependency graphs and advisories change independently.

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.