Jenkins CI tool is backed by very strong active open source community which developed hundreds of very handy and useful plugins. While going through couple of existing pipeline in couple of teams, I have seen developers have tried to reinvent the wheel in many cases with adding all sort of nancy fancy, half tested logic to accomplish tasks, and nonetheless I was one of them. If I look back and asses, there were tons of handy plugins which could solve the use case with very minimum pain and could promote reusability across the projects.
I realize it's good to note down those plugins which I found very handy in day to day job of ours. I understand things are changing rapidly this domain, so I assume this post may be stale in very near future.
Managing a pipeline in Jenkins expects moderate configurations across all the jobs participating in the flow. Configuration can combine different types including parameterized build, parallel builds, joins or downstream wait. With the addition of more jobs, it gets quite complicated for further updates. The build process is then scattered in all those jobs and very complex to maintain. Technically individual Jobs are meant to carry the responsibility for their unique task but with this pipeline configuration they also carry such this joins connection details which pollute their goal. In this scenario, Build Flow Pipeline comes to the rescue. This plugin is designed to handle complex build workflows (aka build pipelines) as a dedicated entity in Jenkins. Build Flow enables you to define an upper-level Flow item to manage the job orchestration and link up rules, using a dedicated DSL. This DSL makes the flow definition very concise and readable. Main jobs don’t know anything about the pipeline as everything is externalized to the flow.
The only missing with this plugin, it doesn't have much support for graphical visualization on monitors. There is a Build Graph View Plugin but it didn't intend what someone expects. If graph view doesn't matter you most, then this can be best plugin to try out, or else go with regular scattered configuration.
Visibility is the core aspect of Jenkins CI tool. Being understood CI is a part of collective ownership, everyone should know if something breaks, some part is not doing well consistently. And to make it in reality, having that projected on a monitor visible to all is the welcome move. Build Monitor Plugin provides a highly visible view of the status of selected Jenkins jobs. It easily accommodates different computer screen sizes and is ideal as an Extreme Feedback Device to be displayed on a screen on your office wall.
Every build comes with build number, but most of the time it's hard to identify a particular build with build number.Many types of build get executed with an update from the revision number by source code, so it would be a great deal to have a revision number as a unique identifier.In order to visualize the actual revision numbers within Jenkins, the Build Name Setter Plugin can be used instead. This makes it easier to identify builds by revision number instead of by build number.
As said earlier, visibility is the core aspect of Jenkins pipeline to be successful in terms of its value.This plugin helps renders upstream and downstream connected jobs that typically form a build pipeline in very nicely fashion on the monitor, big monitors specially. In addition, it offers the ability to define manual triggers for jobs that require intervention prior to execution, e.g. an approval process outside of Jenkins. This would help other decision-making teams(NonDevelopers like QA, BA or another kind of authority) to continue the pipeline
Build-timeout is simple but necessary.
This plugin makes it possible to archive the workspace from builds of one project and reuse them as the SCM source for another project.This is useful in terms of avoiding space issues, and copying over same source code which is not absolutely needed in the couple of cases, resulting faster execution and feedback.
This plugin integrates Cobertura coverage reports to Jenkins. If testing framework in your build job creates reports aligned to xUnit standards, this can be handy plugin to project the progress in nice charts and detailed format.
This plugin allows you to show the results of Cucumber tests within Jenkins.This plugin really helped the team to accommodate the BDD development style. Cucumber plugin formats the raw reports into very nicely and visible charts which can be easily understood by Non-Tech folks like BA and Product owners.
This plugin visualizes Delivery Pipelines (Jobs with upstream/downstream dependencies). This is somewhat similar to Build pipeline plugin but has very lean design. This is favorite plugin across the teams here out in my company.
This plugin is a replacement for Jenkins's email publisher. This is more advanced plugin with better features for sending build status messages. Please make sure you setup very granular and effective way of communication to the responsible team rather than the whole team.
This plugin integrates GIT with Jenkins. This plugin also added feature of notifying the build about git code base updates using REST API. This is very useful feature where Git Hooks can notify the builds immediately rather build wait for Git poll interval.
During concurrent execution of jobs, Heavy Job Plugin can be used to allocate all available executors on that node in order to ensure exclusive access to all the local repositories.
This plugin is a HipChat notifier that can publish build status to HipChat rooms.This plugin adds more visibility and awareness in terms of build status into the team resulting more sense of collective ownership.
This plugin allows you to capture code coverage report from JaCoCo. Jenkins will generate the trend report of coverage. This plugin is a fork of the [Emma Plugin]. Big part of the code structure comes from it, however, it is completely refactored. It also includes functionality similar to the [Emma Coverage Column] which allows to include a column in Dashboards which displays the latest overall coverage numbers and links to the coverage report.
If you are thinking of setting up parallel jobs in pipeline, you may end up in a scenario known commonly as 'diamond' shape project dependency. It means there is a single parent job that should start several downstream jobs. Once those jobs are finished, a single aggregation job runs. This plugin allows a job to be run, after all, the immediate downstream jobs have completed. In this way, the execution can branch out and perform many steps in parallel, and then run a final aggregation step just once after all the parallel work is finished. More complex interactions are not possible with this plugin.
NodeLabel Parameter Plugin can be used to assign the cleanup jobs to the specific nodes. This plugin adds two new parameter types to job configuration - node and label, this allows to dynamically select the node where a job/project should be executed.
This plugin lets you trigger new builds when your build has completed, with various ways of specifying parameters for the new build. You can add multiple configurations: each has a list of projects to trigger, a condition for when to trigger them (based on the result of the current build), and a parameters section.
This is very handy plugin in terms of Performance testing. This plugin integrates JMeter reports, JUnit reports, work output, and Iago reports into Hudson.
In scenarios where multiple pipeline executes in parallel, build steps of different pipelines oftenly expected not to get execute in a random order. For example, deploying artifacts of a pipeline to a live server cannot be succeeded by deploying artifacts of another pipeline earlier than a smoke test has run for the already deployed artifacts. This can be guaranteed by assigning a higher priority to the smoke test job using the Priority Sorter Plugin.
Sometimes a step in the pipeline might fail because of some technical error that is not related to the associated revision like Jenkins restart, or out of memory issue. In order to trigger a rebuild of the failed downstream job the pipeline parameters revision number and build number need to be specified manually, which is a bit awkward. Here the Rebuilder Plugin comes in handy, which facilitates rebuilding a job with the same parameters as the failed build.
This plugin allows to share workspaces by Jenkins jobs with the same SCM repos. It saves some disk space and repetitive steps if you have different jobs with identical repos. Importance of this plugin is not well understood by the developers, considering the memory is cheap. But following standard practices and promoting reusability can be fruitful in the future.
This plugin allows you to provide SSH credentials to builds via a ssh-agent in Jenkins.
You can use the SSH Plugin to run shell commands on a remote machine via ssh.
This plugin allows you to manage slaves running on Unix machines over SSH. It adds a new type of slave launch method. This launch method will open a SSH connection to the specified host as the specified username. Once it has a suitable version of java, copies the latest slave.jar via SFTP. Starts the slave process.
This plugin adds the Subversion support (via SVNKit) to Jenkins.
This plugin simply backs up the global and job specific configurations (not the archive or the workspace). One of the main features is automated backups. This is far better then Backup Plugin.
The Throttle Concurrent Builds Plugin can be used to define throttle categories and restrict concurrent execution of jobs by assigning them to the same throttle category.
A wall display that shows job build progress in a way suitable for public wall displays. Rendering is performed using ajax based on REST API calls, so requires no page refreshes. It's one of the plugin you would like to give a try.
One of the commonly recommended tasks of Jenkin Job is to cleanup itself after build is finished to maintain immunity for next build. I have seen most of the time teams uses ‘rm -rf *’ somehow in script which works fine but doesn't cover bad scenarios. This plugin is exactly meant to save us from this granular job. This plugin deletes the project workspace after a build is finished.
This plugin makes it possible to record xUnit test reports.