Skip to content
Notifications
Clear all

Switched from Jenkins to GitHub Actions, here's why the migration was worth it

3 Posts
3 Users
0 Reactions
68 Views
(@cloud_infra_newbie)
Honorable Member
Joined: 7 months ago
Posts: 367
Topic starter   [#28952]

We had a simple Jenkins pipeline for our Node.js app. It worked, but managing the server and grokking the Groovy syntax was a pain for me as a newbie. The final straw was when our Jenkins box crashed and we lost configs 😅.

I convinced the team to let me try migrating one service to GitHub Actions. The biggest win? It's just YAML files living with the code. No more context switching.

Here's the basic workflow I replaced the Jenkins pipeline with:

```yaml
name: Node.js CI
on: [push]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
```

The migration itself took about 2 days for our main service. Most time was spent figuring out the Actions syntax and secrets management (which is way simpler than Jenkins). Now everything—code, issues, and CI config—is in one place. I'm never going back. The team liked it so much we migrated everything else over the next sprint.



   
Quote
(@devops_dad_v2)
Reputable Member
Joined: 7 months ago
Posts: 380
 

I'm a platform engineer at a mid-sized e-commerce company. We run about 50 microservices in Kubernetes, and I manage the CI/CD platform that builds and deploys them. We used Jenkins for years but now run nearly all our workloads on GitHub Actions, with some complex pipelines still in GitLab CI.

Here's a breakdown based on running both systems in production.

* **Maintenance Overhead:** Jenkins requires a dedicated VM or K8s cluster you manage, which at our scale meant ~5 hours a month in patches, plugin updates, and troubleshooting. GitHub Actions is a SaaS platform; the only ongoing ops cost is secret rotation and managing self-hosted runners if you need them.
* **Configuration Complexity:** Jenkins pipelines, especially declarative ones in Groovy, have a steeper learning curve. GitHub Actions uses YAML, which is easier to start with, but complex multi-job workflows with matrices and dependencies can get deeply nested and tricky to debug. The main advantage is the config living with the code repo.
* **Cost Model & Scaling:** Jenkins is "free" but has real hidden costs in engineering time for maintenance. GitHub Actions has a clear per-minute cost for Linux runners on their hosted infrastructure. For us, it runs ~$15-20/user/month beyond the base GitHub plan. The cost can spike with inefficient workflows, so setting concurrency limits is a must.
* **Enterprise Integration & Security:** Jenkins wins for complex, air-gapped, or heavily regulated environments because you control the entire stack. GitHub Actions is easier for cloud-native shops already on GitHub. Their secrets management is fine for basic use, but we had to integrate with HashiCorp Vault for dynamic secrets, which required custom actions.

I'd recommend GitHub Actions for teams that are already on GitHub and have straightforward to moderately complex pipelines, especially if you want to minimize infrastructure management. For organizations that need extreme customization, run on-prem infrastructure, or have compliance requirements that demand full control over the CI environment, Jenkins is still the more flexible choice. To make a clean call, tell us if you have a strict on-prem requirement and the approximate number of concurrent builds you typically run.



   
ReplyQuote
(@cloud_cost_fighter)
Honorable Member
Joined: 6 months ago
Posts: 404
 

You nailed the Jenkins hidden costs, but I've seen teams get sticker shock on the GitHub side too once they scale. That "clear per-minute cost" adds up fast if you're using those hosted macOS runners for iOS builds, or if you don't set concurrency limits and end up with 20 parallel jobs on every push.

We saw a 40% reduction in our CI bill by moving high-volume, low-complexity jobs (like linting) to self-hosted runners on spot instances. The trick is knowing what to offload. The SaaS "ops cost" is zero until you suddenly need a custom runner pool, and then you're back to managing infrastructure, just a different slice of it.

Would be curious what made you keep the complex pipelines in GitLab CI. Was it a cost thing, or something Actions couldn't handle?


Cloud costs are not destiny.


   
ReplyQuote