A background to Jenkins
Like many engineers, if you’ve been around the block a few times you will have at the very least stumbled across Jenkins (or if you are as old as I am, you will remember the days of Hudson). For those that haven’t, Jenkins is a “leading open-source automation server”, supporting a plethora of plugins for almost any job imaginable.
When it comes to automation, building, testing, and deploying code, it’s been a staple for well over a decade. In fact, for a long time, it was considered the benchmark against which every other automation tool was ranked.
A large part of the success achieved by Jenkins is down to the endless ways in which it can be configured, tweaked, moulded and shaped into achieving almost any number of different tasks. From running a simple schedule-based bash script to conducting and orchestrating thousands of multi-stage CI/CD pipelines. If you can think of a job that needs to be automated, it’s a sure bet Jenkins can do it.
Over the years the Jenkins community have developed a large plugin ecosystem to help make it so successful. Some of the reasons that people reach for Jenkins include:
- It can be connected to virtually any version control system (GitHub, Bitbucket, AWS CodeCommit etc.).
- Great for building, testing, and packaging software (continuous integration).
- Powerful pipeline functionality which supports both scripted and declarative pipelines.
- Various ways to change the way Jenkins looks and feels or to add functionality.
If Jenkins is so great, why is it time to say goodbye?
As the industry moves forward into an ever-increasingly cloud-native world, Jenkins’ place feels more and more at risk. Here are a few reasons why:
- Jenkins does not have an officially managed offering and needs to be self-hosted.
- It’s vastly over-complex; it requires intricate knowledge to build, operate and maintain at scale.
- This intricate knowledge has created a bottleneck, requiring experienced admins when new jobs, builds or pipelines are required.
- Advanced pipeline functionality requires the use of a groovy-like syntax which requires development expertise.
- Managing a vast array of plugins and the interdependencies between them is extremely challenging; often this does not align with the functionality required by your end users.
If not Jenkins, then what?
Over the last few years, several products have come to the fore as legitimate alternatives to Jenkins. For example:
- AWS CodePipeline
- Azure DevOps
- GitHub Actions
- Bitbucket Pipelines
These solutions do a great job of replicating and enhancing the core functionality required of any automation tool. However, what drives the growth of these tools is simplicity. This comes from:
- Hosting. Some are offered as cloud-hosted SaaS Solutions (Software as a Service), not only does this offer scalability out of the box but it completely removes the need to self-host and equally build, operate and maintain.
- Ease of setup. Building jobs and pipelines are primarily done in YAML and in some cases, support a variety of other languages.
- Extendibility. Plugin and Marketplace communities have grown significantly to rival Jenkins in offering additional functionality or pre-built pipelines and templates.
- Integration. Many of these solutions also have the added benefit of being part of commonly used solutions. For example, AWS, Microsoft Azure or GitHub.
A future without Jenkins
Jenkins would not be the much-loved and long-serving mainstay that it’s been without its ability to morph, evolve and adapt to an ever-changing landscape.
However, Jenkins is still a product of its time. A piece of open-source software that requires delicate handling and nurturing before you can extract its full potential. This is almost an antithesis of what makes cloud-native SaaS solutions such a perfect fit for the future.
Modern technology demands a certain simplicity and speed for which Jenkins simple cannot compete. Its intricate complexity, which was once its greatest strength, has now turned into its greatest weakness.
It is for this overwhelming reason I believe Jenkins has had its day.