Jenkins is unfashionable in a way that outstrips its actual decline. Plenty of teams have moved greenfield projects to GitHub Actions or GitLab CI and never looked back, and for a new project starting today, one of those is usually the right default. But Jenkins is still running in a lot of infrastructure that isn't going anywhere soon, and understanding why requires separating what's genuinely dated about it from what it still does better than the hosted alternatives.
The plugin ecosystem is both the strength and the liability
Jenkins has a plugin for nearly everything — obscure artifact repositories, legacy on-prem systems, hardware test rigs, internal tools that predate any modern CI platform's existence. That long tail is exactly why some organizations can't leave: a GitHub Actions or GitLab CI migration that needs to talk to a 15-year-old internal deployment system often just doesn't have an equivalent integration, while Jenkins already has a plugin someone wrote in 2014 that still works. The cost of that flexibility is maintenance: plugins go unmaintained, version compatibility between plugins and Jenkins core breaks in ways that surface as a broken pipeline at the worst time, and a Jenkins upgrade can turn into a multi-day project of chasing plugin compatibility instead of an afternoon task.
A Jenkins instance with 15 carefully chosen, actively maintained plugins is a very different operational burden than one with 80 plugins accumulated over a decade, several unmaintained. Before blaming "Jenkins" for fragility, audit the plugin list — the deprecated Script Security bypass and abandoned integrations are usually the actual source of pain, not Jenkins core.
Jenkinsfiles are genuinely good pipeline-as-code
The declarative Jenkinsfile syntax, checked into the repo alongside the code it builds, was doing pipeline-as-code years before it became the default assumption everywhere else. It's verbose compared to a GitHub Actions YAML file, and Groovy as a scripting layer for the "scripted" pipeline style is a steeper learning curve than most teams want, but the declarative syntax covers the common cases — stages, parallel steps, conditional execution, post-build actions — without needing Groovy expertise for typical use.
pipeline {
agent { label 'docker' }
stages {
stage('Build') {
steps {
sh 'docker build -t app:$GIT_COMMIT .'
}
}
stage('Test') {
parallel {
stage('Unit') { steps { sh 'make test-unit' } }
stage('Integration') { steps { sh 'make test-integration' } }
}
}
stage('Deploy') {
when { branch 'main' }
steps {
sh 'docker push registry.internal/app:$GIT_COMMIT'
}
}
}
post {
failure {
slackSend(message: "Build failed: ${env.BUILD_URL}")
}
}
}
The self-hosted tax
The single biggest difference between Jenkins and GitHub Actions or GitLab CI's SaaS offerings isn't the pipeline syntax, it's who patches the server. Jenkins is software you run — controller uptime, agent capacity planning, security patching the controller and every plugin, and scaling build agents up and down are all your team's job, not a vendor's. For a team already running significant on-prem or self-hosted infrastructure, that's a marginal addition. For a team with no other reason to run servers, it's a real ongoing cost that a hosted CI platform simply removes.
Where Jenkins still wins in 2026
Jenkins remains the better choice when you need build agents on hardware or network segments a SaaS runner can't reach — an on-prem build farm, a network-isolated environment, specialized test hardware — when you have deep integration needs into legacy internal systems that only have a Jenkins plugin, or when your organization already operates the infrastructure to run it reliably and the migration cost to something else isn't justified by a marginal DX improvement. It's the wrong choice for a new project with no legacy constraints, where GitHub Actions or GitLab CI's zero-maintenance model and better default developer experience win outright.
Wrapping up
Jenkins in 2026 isn't a mistake to be quietly migrated away from on principle — it's infrastructure that makes sense for teams with legacy integrations, on-prem build requirements, or existing operational capacity to run it, and a genuine maintenance burden for teams without those constraints who'd be better served by a hosted CI platform. The plugin ecosystem is the reason both of those things are true at once: it's why Jenkins can do things nothing else can, and it's why an unmaintained Jenkins instance rots faster than people expect.
Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.