Retrospective: We Ditched Jenkins and Saved 30% on CI Costs Using GitLab 17 and Pulumi 3.150 for 2026 Teams
Our Jenkins Pain Points
By late 2025, our engineering organization supporting 12 distributed product teams (the core of our 2026 planning cohort) was drowning in Jenkins maintenance. We ran 45 self-managed Jenkins controllers across 3 regions, with over 200 plugins to support legacy pipelines, static agent pools, and custom Groovy scripts. Key issues included:
- Idle agent waste: Static agent pools sat unused 40% of the time, driving up cloud compute costs
- Plugin hell: Conflicting plugin versions caused weekly outages, requiring 2 full-time engineers to maintain
- Pipeline portability: Jenkins pipelines were tied to our legacy on-prem controller, with no native support for hybrid cloud workloads we planned for 2026
- Cost opacity: We couldn't attribute CI costs to individual teams, making it impossible to optimize spend
Why GitLab 17 and Pulumi 3.150?
We evaluated 6 CI platforms in Q4 2025, prioritizing unified tooling, native infrastructure-as-code (IaC) integration, and granular cost reporting. GitLab 17 stood out for its built-in CI/CD, native container registry, and 2026-ready hybrid cloud support. We paired it with Pulumi 3.150 for IaC management: Pulumi's support for TypeScript (our team's primary language) and native GitLab provider let us define runner infrastructure as code, avoiding the YAML fatigue of other IaC tools.
Key selection criteria wins:
- GitLab 17's auto-scaling runner groups cut idle resource waste by 60% in initial tests
- Pulumi 3.150's new spot instance integration let us run non-critical CI jobs on discounted compute, reducing per-job costs by 45%
- GitLab's per-project CI cost attribution gave us the visibility we lacked with Jenkins
Migration Process
We migrated 140+ Jenkins pipelines to GitLab CI over 8 weeks in Q1 2026, using a phased approach:
- Provisioned GitLab runners using Pulumi 3.150: We defined auto-scaling runner groups for x86 and ARM workloads, with spot instance fallback for low-priority jobs. Pulumi's state management let us track all runner infrastructure changes across regions.
- Converted Jenkins pipelines to GitLab CI YAML: We built a custom migration script to translate Groovy pipeline definitions to GitLab's YAML schema, reducing manual conversion time by 70%.
- Ran parallel validation: We ran Jenkins and GitLab pipelines side-by-side for 2 weeks, validating build parity before cutting over traffic.
- Decommissioned Jenkins: We shut down all Jenkins controllers and agents on March 31, 2026, redirecting all CI traffic to GitLab.
Results: 30% Cost Savings and More
By the end of Q2 2026, we'd achieved our target 30% reduction in CI spend, with additional unplanned benefits:
- Cost breakdown: 18% savings from auto-scaling runners eliminating idle waste, 10% from Pulumi-managed spot instances, 2% from GitLab's volume pricing discounts
- Maintenance reduction: We reallocated 2 full-time Jenkins engineers to product work, saving an additional $240k annually in engineering time
- Performance gains: Average pipeline runtime dropped 22% thanks to GitLab's optimized job scheduling and Pulumi-provisioned high-performance runners
- Team satisfaction: 92% of developers reported preferring GitLab CI over Jenkins in our post-migration survey
Lessons for 2026 Teams
If your team is planning CI modernization for 2026, we recommend:
- Audit your current CI spend before migrating: We found 35% of our Jenkins costs were wasted on unused plugins and idle agents, which helped us set clear savings targets
- Use IaC to manage CI infrastructure: Pulumi 3.150 let us version, test, and roll back runner changes safely, avoiding the configuration drift we had with Jenkins
- Leverage GitLab 17's built-in features: Don't over-customize pipelines early; use native GitLab CI features before building custom tooling
- Run parallel validation: Catching pipeline parity issues before cutover avoids production outages
Conclusion
Ditching Jenkins wasn't just a cost-saving move: it modernized our CI infrastructure for 2026's hybrid cloud, distributed team requirements. Combining GitLab 17's unified platform with Pulumi 3.150's flexible IaC gave us a scalable, cost-effective CI setup that grows with our team. If you're struggling with Jenkins costs or maintenance, we highly recommend this stack.
Top comments (0)