Chapter 19Lesson 03~130 minutes

Docker Pipeline, Containerized Build Steps, Docker Agents, Sidecars, Registries, and Image Workflows: Configuration, Design Choices, and Tradeoffs

Choose Docker Pipeline plugin versus CLI, local/rootless/remote builders, top-level versus stage containers, workspace/cache reuse, and digest promotion by trust, portability, auditability, failure isolation, resource cost, and rollback.

Design choicesCLI vs pluginRootlessDocker agentPromotionRollback

Learning objectives

  • Choose Docker Pipeline plugin or CLI with explicit lifecycle and compatibility consequences.
  • Compare rootful local Docker, rootless Docker, remote Docker, and isolated builders as distinct trust models.
  • Choose top-level Docker agents, stage-level Docker agents, or Scripted inside intentionally.
  • Separate workspace/cache reuse from container lifecycle.
  • Promote exact digests rather than rebuilding or trusting mutable tags.

1. Docker Pipeline plugin versus Docker CLI

The Docker Pipeline plugin offers Jenkins-native abstractions for common execution patterns. Raw CLI is more explicit and often exposes newer Docker features directly. Neither is inherently “more secure”; both ultimately operate against a Docker daemon/builder and therefore inherit its trust boundary.

Criterion Docker Pipeline plugin CLI
Jenkins readability High for Docker agents/inside/sidecars Generic shell commands
Controller dependency Plugin version/dependency governance Less plugin coupling
Newest Docker features May lag or need custom args Directly available when CLI supports them
Lifecycle ownership Helpers manage some lifecycle Pipeline owns naming/cleanup/error paths
Portability outside Jenkins Lower Higher

2. Local rootful daemon, rootless daemon, remote daemon, isolated builder

Dedicated local rootful Docker is simple and fast but high impact: daemon control can imply host-level power. Keep it on a trusted disposable/dedicated worker.

Rootless Docker moves daemon/container execution into a non-root user namespace. This reduces privilege but does not make arbitrary CI code harmless; the job still controls that user’s container engine, files, network, and resources.

Remote Docker via SSH/TLS relocates daemon authority to another host. Docker documents secure SSH/TLS access; the connecting credential is sensitive. Jenkins Docker Pipeline inside also expects compatible filesystem visibility for workspace mounts, so API reachability alone does not guarantee that inside works with a remote daemon.

Ephemeral or isolated builders can reduce long-lived host state and improve separation, at the cost of provisioning, caching, and additional control-plane complexity.

3. Top-level versus stage-level container execution

Pattern Use when Tradeoff
Top-level Docker agent Most stages use one toolchain Longer-lived shared container context
Stage-level Docker agent Stages need different toolchains More pulls/startup; workspace decisions per stage
Scripted inside Dynamic Scripted flow More Groovy/lifecycle complexity
Raw CLI container Explicit portable lifecycle required Manual mount/user/network/cleanup

Current Jenkins docs note that Declarative reuseNode true keeps the current node/workspace for a Dockerized stage; the same option is not available in Scripted form. Choose based on dataflow and isolation, not syntax preference.

4. Workspace and cache design

A reused workspace improves feedback time but can preserve stale files. Fresh workspaces improve isolation but require checkout/stash/artifact transfer. Docker layer and package caches reduce network/build time but are shared mutable state. Scope them by trust/tool/version and measure hit rate versus disk pressure.

Never store registry secrets, signing keys, or untrusted artifacts in broadly shared caches.

5. Mutable tag versus digest promotion

A tag such as :candidate is a channel name. A digest such as sha256:… is content identity. A promotion record should bind source/build/repository/digest/target:

producer_job=jenkins/ch19-image
producer_build=184
source_sha=abc123...
repository=registry.example.invalid/team/app
digest=sha256:0123...
promotion_target=staging

Promotion may add/move a target tag, but it must refer to the already verified digest. Re-running docker build from the same Git SHA is a new build, not promotion.

6. Registry credentials and auth context

Credentials Binding with docker login --password-stdin is explicit and portable. Docker Pipeline’s withRegistry can scope registry authentication through a Jenkins credential ID. In both cases, the credential should be repository-scoped where possible and live only for the shortest needed stage.

Authentication success and repository authorization are different states. Record credential ID/reference and push result without logging the secret or archiving Docker auth files.

7. Plugin, engine, and image governance

Docker Pipeline 653.v2f2c08eff0ec is executable controller dependency state. The Docker Engine/CLI version is worker state. Base/test images are external dependencies identified by upstream tags plus resolved digests. Track all three independently. A plugin upgrade should be tested with representative container, sidecar, registry, and workspace flows.

8. Worked scenario: trusted main branch and untrusted fork PRs

Decision Trusted release Untrusted PR
Worker Dedicated Docker/build pool Constrained pool without privileged daemon
Input image Reviewed digest Reviewed digest
Registry credentials Scoped push identity None for release registry
Candidate Push and record digest Test-only output
Promotion By existing digest Not authorized

The trust decision occurs before the Pipeline receives daemon/credential authority. That is more reliable than trying to sanitize arbitrary PR commands afterward.

9. Resource and feedback tradeoffs

  • Cold pulls increase registry bandwidth and stage startup time.
  • Layer caches reduce time but consume disk and preserve state.
  • Parallel image builds can saturate CPU/disk/registry bandwidth before Jenkins executors are the bottleneck.
  • Remote builders improve isolation but add network latency and another credential boundary.
  • Per-stage containers improve tool isolation but increase lifecycle overhead.

Measure pull/build/push time, daemon disk use, CPU/I/O, queue wait, and registry latency before increasing executors or retries.

10. Rollback reuses known content

If digest B is bad and digest A was previously verified, rollback should redeploy/repoint to A according to target-platform controls. Do not rebuild “the old commit” and call the result A; the rebuilt digest can differ.

Next lesson

Diagnostics, Failure Modes, Security, and Performance

Diagnose daemon privilege leakage, tag drift, registry-secret exposure, orphaned sidecars, remote-workspace mismatch, and rebuild-based promotion errors.

Knowledge check

Answer before revealing the explanation.

1. When is the Docker Pipeline plugin a good fit?

2. Does rootless Docker make arbitrary CI code safe?

3. What is the key top-level versus stage Docker-agent tradeoff?

4. Why promote by digest instead of rebuilding from the same Git SHA?

5. Why govern the Docker Pipeline plugin version?

Official references and version notes

Assumption timestamp: 2026-09-17. Recheck Jenkins LTS/Java, Docker Pipeline health/version/dependencies, Docker Engine security/release notes, and all image tags/digests before repeating later.

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.