Jenkins is a great open source automation platform. It has some great features straight out of the box.
However, in my opinion, what makes it standout is its community and the plugins it develops.
There are more than a thousand plugins available to support almost every technology, tool and process for building, deploying and automating your projects.
These are some of the plugins I use the most and which without I would have my work a lot harder.
Let's start with a simple one. Jenkins's console does not support ANSI escape sequences, specifically color ones, out of the box. This means that whatever tool you're using the console will be just black and white.
Ansi Color plugin adds support for ANSI escape sequences to the Jenkins console output, making it possible to have colored output on your logs. This depends on the tool your using, if it doesn't print ANSI characters there's nothing you can do.
Let's face it! Jenkins UI is not the greatest, however there are lots of plugins that adress this issue.
Blue Ocean gives you an incredibly user friendly UI to interact with Jenkins. Its developers claim that anyone, even non technical people, can use Jenkins easily with Blue Ocean.
Here's a pipeline representation in Blue Ocean:
Tip: Blue Ocean works great when you're trying to analyze logs of a pipeline running tasks in parallel. On the classic view, parallel logs are scrambled.
When you spend most of your day building pipelines and automating boring tasks, you want people to actually use them. To achieve that you have to make it easy to use.
Git Parameter plugin lets you have Git branches, tags or revisions as a parameter for starting a job or pipeline.
This is really useful if, for example, you want to setup a continuous delivery pipeline where the developer can choose from which Git tag to deploy from.
Tip: always filter branches/tags according to the pipelines purposes, otherwise you might end up with instable code in production environments for example.
In my company, we use a hosted GitLab instance as our source code management tool. And even though I love GitLab's approach to CI (have a read) we haven't gone that route.
So we use Jenkins instead and connect it to GitLab. In the end, developers have the same experience.
GitLab plugin lets you call pipelines from GitLab, using WebHooks, and publish the build results back to GitLab.
This allows you to quickly get feedback from your CI pipelines.
You can find the similar plugins for other SCM tools.
Tip: favor execution of pipelines through WebHooks over SCM polling when ever you can. On big systems you'll get better performance.
When something goes wrong you need your users to fix the problem as soon as possible, otherwise your CI/CD could be compromised.
Extended Email plugin extends Jenkins email notifications giving control over almost every aspect of it. You can customize the notifications triggers, content and recipients.
Have a look at these recipes to have some ideas of your own.
Tip: make sure every notification you send is absolutely necessary, do not spam your users. Trust me, the less notifications you send the more users will read them and actually react to them. Use IM plugins (like Slack plugin or Skype plugin) to sparse your notifications.
Another great way to warn your users when something is wrong is to use Badges on your SCM tool.
This plugin generates badges for all your jobs which display, in real time, their build status.
As you probably take from the name, this plugin provides features to send files and run commands over SSH.
You can configure your remote hosts on you Manage Jenkins page and then use them on your jobs.
Tip: if for some reason you cannot have a Jenkins agent installed on one of yours hosts, this plugin allows you to run commands remotely over SSH.
Once you get a considerable amount of jobs set up, it might get hard to keep up with every thing that's happening and running on your Jenkins.
Next Executions Plugin adds a widget to the main page of your Jenkins instance that displays the next build date of all your scheduled jobs.
This will give you a much better picture of the state of your infrastructure.
These are some of the plugins I use every day and there are thousands more to explore.
Do you have any favorite one? Let me know in the comments! I'm looking for some new favorite plugins :D