Chapter 25Lesson 03~165 minutes

Plugin Ecosystem, Plugin Dependencies, Update Center, Compatibility, Pinning, Removal, and Plugin Governance: Configuration, Design Choices, and Tradeoffs

Choose deliberately between plugin code and external tools, curated sets and convenience sprawl, reviewed batches and automatic updates, dynamic loading and planned restarts, and disable-first retirement versus uninstall. Every choice is tied to controller state, dependency risk, recoverability and observable evidence.

TradeoffsPinningRestartDisableUninstallCurated set

Learning objectives

  • Choose plugin versus external tool using controller-privilege and lifecycle criteria.
  • Design a minimal curated plugin set with explicit ownership and update cadence.
  • Compare automatic updates with reviewed batches and staged clones.
  • Choose dynamic load versus planned restart based on consistency and rollback.
  • Retire plugins through disable-first evidence before uninstalling.

1. Plugin versus built-in capability or external tool

Start with the ownership layer. If Jenkins core/Pipeline already provides the capability, adding a plugin creates duplicate surface. If a CLI can run on an agent, prefer that boundary when it avoids controller extension points. Use a plugin when the integration genuinely needs Jenkins lifecycle APIs, descriptors, credentials integration, SCM source behavior, reports or controller UI/state.

Need Preferred first choice Why
Parse a project file during build Agent-side tool/library Keeps untrusted project data off controller code path
Add a new SCM Branch Source Maintained plugin Requires Jenkins discovery/indexing extension points
Simple timeout in Pipeline Built-in Pipeline timeout step Avoids redundant plugin for Pipeline use
Render JUnit reports Maintained Jenkins report integration Needs build action/report ingestion UI

2. Minimal curated set versus convenience sprawl

A curated set has a named owner, business/technical justification, target core compatibility, dependency graph, security review status, smoke tests, upgrade cadence and retirement criteria. Convenience sprawl accumulates extensions because “someone might need it.” The latter raises attack surface, classloading complexity, startup time and advisory workload.

Use a quarterly/regular review to ask: Which jobs still reference this plugin? Which plugins are disabled? Which are up for adoption/deprecated? Which advisories apply? Which capabilities moved into Jenkins core or can now run agent-side?

3. Automatic update versus reviewed batch

Production plugin upgrades should normally be a reviewed batch: freeze target Jenkins core, resolve candidates from the version-specific update center, inspect advisories and minimum-core requirements, build a clone/image, run representative tests, schedule restart, then promote the same manifest.

Automatic unattended updates can reduce patch delay but trade away deterministic review and can combine many transitive changes. If an organization chooses automation, it still needs policy gates, canary controllers, rollback snapshots and evidence.

4. Dynamic load versus planned restart

Some plugins can be installed/updated without an immediate restart. That capability is not a guarantee that every plugin or dependency can be safely hot-reloaded or that all existing runtime objects now reflect the new code. A planned restart provides a deterministic initialization boundary and exercises startup dependency resolution.

Production pattern. Prefer “download/stage → maintenance window → clean restart → verify startup + representative jobs” for governed controller changes unless the plugin’s maintainer guidance and your tests explicitly support dynamic deployment.

5. Disable versus uninstall

Disable is reversible and preserves the archive while hiding its extensions. Uninstall removes the archive, but Jenkins preserves plugin-created configuration until it is overwritten or explicitly purged. That means retirement is a sequence: prove no dependent plugin/job needs it → disable in clone → restart and inspect warnings → disable in target → observe → uninstall in clone → restore test → only then consider production uninstall.

6. Version pinning as code

Store exact plugin versions in a reviewed manifest/controller image. Resolve and test transitive dependencies too. For the official Docker workflow, jenkins-plugin-cli is appropriate, but understand its resolution flags: default latest behavior can select newer dependency versions even if direct plugins are pinned. Capture the final installed list and hashes from the staged controller.

7. Update-center and provenance choices

The default Jenkins update site is the normal trusted distribution source. If an enterprise mirrors it, governance must record mirror origin, synchronization policy, signatures/checksums and update-center generator version. The 2 September 2026 advisory included update-center2 itself as an affected component for operators of self-hosted update sites—evidence that the distribution path is part of the supply chain.

8. Worked decision table

A platform team wants a UI theme, a YAML parser and a cloud deployment helper.

Capability Decision Prerequisites/trust Evidence
Dark UI Install maintained Dark Theme Core ≥ 2.528.3; Theme Manager dependency Plugin page, manifest, clone startup/UI smoke test
Parse YAML produced by build Prefer agent-side language/tool unless Pipeline integration justifies plugin Trusted build agent/toolchain Tool version + source SHA + output artifact
Deploy to external cloud Prefer provider CLI/API on privileged dedicated agent where feasible Scoped workload identity; no untrusted PR code CLI version, credential scope, deployment response

9. Rollback design

Rollback requires four compatible identities: Jenkins core/Java, plugin set, JENKINS_HOME data and external state. A plugin downgrade is not necessarily backward-compatible with configuration written by a newer release. Snapshot/restore testing is therefore part of plugin change governance, not an unrelated backup concern.

10. Tradeoff summary

Choice Benefit Risk/cost Production evidence
Minimal curated plugins Smaller attack/maintenance surface May require external tooling Approved manifest + owner/justification
Reviewed batch Deterministic test/rollback Patch latency if cadence is slow Candidate manifest + test report
Dynamic load Less immediate downtime Mixed runtime state/compatibility ambiguity Maintainer support + clone test
Planned restart Clean initialization boundary Maintenance window startup log + smoke tests
Disable first Reversible retirement proof Archive still present restart warnings + dependency/job scan
Next lesson

Diagnostics, Failure Modes, Security, and Performance

Preserve first-failure controller evidence, separate dependency/core/data failures, and repair plugin incidents without blind upgrades or unsafe downgrade assumptions.

Knowledge check

Answer before revealing the explanation.

1. When should a capability stay outside Jenkins as an external tool instead of becoming a plugin?

2. Why prefer reviewed plugin batches over automatic fleet-wide updates?

3. When is disabling preferable to uninstalling?

4. Why can “install without restart” still be a poor production default?

5. Why should a plugin health score not be treated as proof that the installed version is safe?

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.