CI/CD Introduced in L7

Jenkins

The CI/CD elder. Self-hosted, plugin-driven, dominant in enterprise. The Groovy Jenkinsfile is a rite of passage.

Mindmap

hover · click to navigate
this tech depends on / used by alternative Shipyard anchor
What it is

The plain-English version

Jenkins is an open-source automation server, originally forked from Hudson in 2011. Self-hosted, agent-controller architecture. You define pipelines in a Jenkinsfile (Groovy DSL) checked into the repo. Massive plugin ecosystem — there's a Jenkins plugin for almost everything.

Why it exists

The problem it solves

Jenkins persists in enterprise for three reasons: it does everything (the plugin ecosystem is unmatched), it runs inside the corporate network (no SaaS dependency), and it has institutional weight (replacing it is expensive). New teams usually pick GitHub Actions or GitLab CI, but anyone in a long-lived org will read Jenkins.

What it competes with

Alternatives

AlternativeTypeWhen it wins
GitHub ActionsCI/CDGitHub's built-in CI/CD. YAML in your repo. Free for public, generous for private. The default for anything on GitHub.
GitLab CICI/CDGitLab's built-in CI/CD. .gitlab-ci.yml in the repo root. The native choice if you're on GitLab.
Where it shows up in Shipyard

Deep links

Vocabulary

The words you'll hear

Controller / Agent
Coordinator / worker. The controller schedules; agents execute.
Jenkinsfile
Pipeline definition. Declarative or scripted Groovy.
Stage / Step
Logical phase / individual command.
Pipeline
Declarative (YAML-ish, recommended) or scripted (full Groovy, more flexible).
Multibranch pipeline
Auto-discovers branches and PRs from a repo, runs Jenkinsfile from each.
Shared library
Reusable Groovy code across pipelines.
Blue Ocean
The modern UI. Easier to read pipelines than the classic UI.
Prompting

Bad vs. good prompt for Jenkins

✕ Bad prompt
write a jenkinsfile
✓ Good prompt
Write a declarative Jenkinsfile for a Node.js app. Stages: Checkout, Install (npm ci), Lint, Test (publish JUnit XML), Build, Deploy (only on main, behind a manual approval gate). Use a Docker agent with node:20 image. On failure, post a Slack message via the Slack notification plugin (channel param at top).

Why it works: Specifies declarative (vs scripted), the Docker agent pattern (cleanest), the test reporting, the gate, and the failure path. The result is reviewable as a Jenkinsfile and matches enterprise conventions.

Pitfalls

What bites real teams

⚠ Plugin sprawl

Jenkins's strength becomes its weakness. Plugins are unevenly maintained; some break on upgrade. Audit installed plugins regularly.

⚠ Scripted vs declarative confusion

Declarative is the modern recommended style. Older Jenkinsfiles are scripted. Mixing them in one file is awkward.

⚠ Controller as single point of failure

Self-hosted Jenkins controller is a piece of infrastructure that needs the same care as production — backups, upgrades, HA.

References

Official docs only