Jenkins is not a modern CI. It is a historical milestone, but if you read an article you should see that it was replaced by other tools. Now I don’t recommend considering Jenkins for new projects. It it fast to set up but extremely hard to support and full of old bugs and legacy code. Writing Groovy pipelines is much harder than pipelines in gitlab/github/forgejo/etc. Tens of plugins you have to use even for simple tasks have inconsistent syntax, many of them are buggy, they often become unsupported or deprecated. This all consumes lot of resourses: I maintain an instance that eats ~4G of RAM being idle.
and full of old bugs and legacy code.
The feeling of reading through those crazy JVM stack traces with classes named “hudson” from the Jenikins prototype… I shudder! Well done for pushing through it all!
I like Jenkins a lot - but I’d love it if somebody could give it a bit of a facelift. It looks and feels very aged at this point.
I have to say, pretty much every CI/CD tool, build automation or whatever you want to call it, sucks.
Somehow they all manage not to offer boilerplate actions since that would be too restrictive, yet they also stand in your way if you want to have advanced features.
I often end up writing pipeline steps/jobs thinking “how is that not already built-in?”.
And my absolutely biggest pain point: why the fuck is there not a single tool that lets me execute pipelines locally? Why do I have to have 200 commits all saying a variation of “pipeline test”?
I agree so, so much; and I’ve been saying similar things for years.
But I recognize that it’s probably a hard problem. For one thing, auth is almost never going to work the same way in CI as it does locally.
…still, though, I feel like there could be some much nicer tooling here.
It can’t be that hard to create a test harness, so I can plug my own variables into the runner context.
Even just an 80% solution would speed up development tremendously.
Well, for GitHub Actions, there’s this: https://github.com/nektos/act
The sentiment of the first half of your comment is the cause of the problem you describe in the second half. Why /should/ the CI tool have any “steps” built in? Use a task runner, or script in your repo for any task you expect CI to do. Configure CI to run the same command you would run locally.
I totally agree, with some caveats:
- It can make the UI much nicer (though I agree there are probably better ways to do it, e.g. native support for letting the program output determine the UI).
- Sometimes you need to run different things on different machines/OSes, and it’s easier if you have separate steps there.
haven’t tried it myself, but I’ve heard https://earthly.dev/ is supposed to address the execute locally problem
In the last few released they made a lot of changes to the UI to give it a much more modern look.
I’ll have to check that out!
“yes, please keep using Jenkins” -every red team ever