This is a guest conversation episode of Ship It Weekly, separate from the weekly news recaps.
In this Ship It: Conversations episode, I talk with Stephane Moser about Pipedrive’s move from Jenkins to GitHub Actions, building self-hosted runners on Kubernetes, shifting deployments toward GitOps with Argo CD, and what it actually takes to roll out a big CI/CD change across a large engineering org.
We talk about why Jenkins had become painful, from Groovy friction to noisy-neighbor problems on shared VMs, why GitHub Actions fit better, how reusable workflows and custom actions helped, why Argo CD beat out Flux for their use case, and how they had to build better observability and internal deployment visibility around GitHub as they scaled.
The bigger theme here is that this was not just a tooling swap. It was a product and platform migration. Isolation, repeatability, self-service, rollout strategy, and observability mattered just as much as the actual CI/CD tools.
Highlights
• Why Jenkins stopped working well for them: Groovy friction, shared VM contention, and poor predictability
• Replacing CodeShip pull request validation first as the low-blast-radius starting point
• Using Actions Runner Controller on Kubernetes with EKS and Karpenter for self-hosted runners
• Why reusable workflows and custom actions helped cut repetition across hundreds of services
• Choosing Argo CD over Flux, Argo Workflows, Tekton, and even a short Spinnaker attempt
• Moving from push-based deploys toward GitOps for better isolation and safer credentials handling
• Building internal observability because GitHub’s workflow visibility was not enough at their scale
• Dogfooding first, then rolling migration out in batches until teams could self-serve the move
• What broke when the new system actually worked too well: bot-driven deploy volume, queueing, and fairness
• The mobile side of the story: Mac minis, unstable runners, GitHub-hosted runners, and a very different migration path
• How AI sped up parts of the mobile migration and troubleshooting, without making the migration trivial
• Stephane’s advice for big CI/CD shifts: start small, reduce blast radius, and use your own platform first
Stephane’s links
• LinkedIn: https://www.linkedin.com/in/moserss/
• Talk video: https://www.youtube.com/watch?v=VrE1dh-1zEY
• Blog post Part 1: https://medium.com/pipedrive-engineering/so-long-jenkins-hello-github-actions-pipedrives-big-ci-cd-switch-03be29c75f63
• Blog post Part 2: https://medium.com/pipedrive-engineering/all-aboard-the-github-actions-express-pipedrives-big-ci-cd-switch-part-2-fcacf834afd2
• GitHub: https://github.com/moser-ss
Our links
More episodes + show notes + links: https://shipitweekly.fm
On Call Brief: https://oncallbrief.com