Jenkins is the standard in continuous integration servers that are deployed on premise because it was one of the first products available in this space and it has continued to innovate. Jenkins can integrate with almost any external system used for developing applications which means that you worry less about your tooling and more about delivering good code. More recent tools that are cloud-based like CircleCI, TravisCI and CodeShip provide similar features but do not have the comprehensive plugin integration that Jenkins still has. Anyone using Jenkins also benefits from years of other developers using the product and solving problems meaning that it is rare that you will run into an issue with this tool that hasn't already been solved.
Jenkins is still heavily plug-in based to add functionality to the base system. Upgrading and maintaining plugins to get desired functionality can sometimes be frustrating and time consuming. Upgrading some plugins can sometimes break the functionality of other plugins leading to breaking jobs that were previously working. This is less prevalent than it used to be but anyone managing a Jenkins instance must be cautious about upgrading plugins and breaking user jobs. That being said, you will not find a greater breadth of plugin variety in any other tool on the market. Jenkins can connect to almost anything which makes integrating with your system of choice a much easier task.
If you require an on-premise (inside the firewall) CI system then Jenkins will be easy to setup and start using in a very short period of time. You can always find help online solving any Jenkins issues you come across so you feel supported and that you won't have to spend time troubleshooting your CI install. If you are open to using cloud tools and you have a simple build then it is worth considering other options because Jenkins is not offered as a cloud service.
I use Jenkins to provide continuous integration of application code and often use it for continuous deployment as well. Jenkins can watch source code repositories for changes and immediately pull that code and send it through a battery of steps designed to ensure that no problems were introduced into the code when it is integrated with other developer's code. Jenkins can execute any step you can program but common steps include unit testing, integration testing, source code analysis, dependency vulnerability scanning and end-to-end testing.