Overall Satisfaction with Jenkins
Jenkins is an extremely powerful continuous integration/continuous delivery tool. It can be used to automate a very diverse set of operations - including, but also well beyond, application deployments. This is thanks to amazing flexibility and the impressive number of available plugins.
In the traditional sense, Jenkins easily addresses the following problems:
In the traditional sense, Jenkins easily addresses the following problems:
- Build and release automation
- Test automation with result report generation
- Test coverage reports
- Version control polling
- Status notifications
- Conditional, concurrent and branched pipelines
- Master-slave architecture
- Credentials storage
- Really, any custom scheduled or event-driven (primarily via version control events) workloads - of course don't go crazy with that, you don't want to schedule data science jobs on Jenkins for example. Key word is "operations".
Thanks to its large community and amount of available plugins, you can easily:
- Integrate with Slack to push notifications, also true for many other chat services
- Integrate with GitHub, GitLab, Bitbucket via hooks (as opposed to polling)
- Create and restore backups
- Integrate with external authentication providers (e.g. OAuth)
- Define your pipelines as code
- Large and diverse selection of plugins
- Build and release automation
- Operations automation
- Does not encourage modular and repeatable design patterns: while Pipeline plugin (pipeline as code) partially solves the problem but it's not quite there yet. You cannot encapsulate your entire pipelines in self-contained, reusable and deployable code.
- Jenkins hasn't caught up in treating containers as first-class citizen. Workloads run directly atop the Jenkins node. This means potential security issues and lacking the ability to constraint resources allocated to workloads.
- It's very plugins-driven. Although the quantity and diversity of available plugins is amazing; but the plugins architecture makes it easy to bloat your Jenkins node with plugins and destabilize it over time. Plugins are installed globally (with ability to enable/disable at job-level).
- Jenkins is a great investment if used for heavily customized workloads.
- For traditional CI/CD problem, the ROI will decrease as Jenkins in its current design does not encourage modular and reusable patterns
- Concourse, Drone.io and CircleCI
Jenkins immense flexibility and its large and impressive selection of available community-driven plugins makes it ideal choice for solving non-traditional problems.
However, for CI/CD - consider the benefit of modern tools that enforce reusable, infrastructure as code design pattern.
However, for CI/CD - consider the benefit of modern tools that enforce reusable, infrastructure as code design pattern.