5 Reasons Why Jenkins Is So Useful And So Popular

01/04/2017   Industry insights  

A guest post from DevOps Guy & Blogger Denny Zhang, which was originally published on his blog, dennyzhang.com.

I use Jenkins quite a lot. For almost everything in my daily work.

Not to mention CI/CD part. I achieve regular deployment through Jenkins. Daily backup and weekly cleanup through Jenkins. Vulnerability scan through Jenkins. Workflow enforcement through Jenkins. And the list goes on and on. 

But just a few years ago, Jenkins (previously Hudson) wasn’t this popular. But now? It is almost everywhere. Why is that? I think there are 5 reasons that have driven this change.

(PS: check the bottom of this post for my Top #10 Jenkins Plugins and links to the plugins mentioned in this post).

1. Jenkins Lowers The Effort Of Converting CLI To GUI

Everybody loves one-button click philosophy. Both users and engineers. The truth is lots of system admins prefer CLI.

So why? Is it because all of the IT professionals are nerds and jerks? Well, maybe…

Implementing reliable scripts takes time. But adding decent UI support takes even longer. (Add comments if you have other opinions).

Now with Jenkins, visual Ops is much easier to achieve.

  • To convert a CLI into a GUI button click, just wrap up the script as a Jenkins job.
  • To support customization and obtain users’ input? Create parameterized Jenkins jobs.

“Tonnes of undocumented scripts” VS “Organized Jenkins jobs”. It’s not a hard decision for you, right?

2. The Pipeline Integrates Individual Jobs For A Bigger Purpose

Imagine each individual Jenkins jobs are small tools. They all serve simple and small purposes only.

With Jenkins pipeline plugin, we can combine multiple jobs together, then serve a bigger purpose. The combination could be either sequentially or parallelly.

As a Linux veteran, you know the value of pipeline, don’t you? It makes a huge difference.

Sequential

stage('Stage1') {
    build job: 'job1', parameters: [string(name: 'para1', value: 'value1')]
    build job: 'job2', parameters: [string(name: 'para1', value: 'value2')]
}

stage('Stage2') {
    build job: 'job3', parameters: [string(name: 'para1', value: 'value3')]
    build job: 'job4', parameters: [string(name: 'para1', value: 'value4')]
}

Parallel

stage('stage1') {
    parallel firstBranch: {
        // do something
        build 'job1'
    }, secondBranch: {
        // do something else
        build 'job2'
    },
    failFast: false
}

3. You Can Keep People In Sync, Especially In Slack

Nowadays teams tend to use one centralised platform for communication. Slack is the most popular one.

Let’s say all critical activities are implemented and triggered from Jenkins. Adding slack integration to Jenkins, people can be notified: what activities have been triggered, on when, by who and the results.

The most beautiful part is no extra human effort is required. Everything is done automatically.

Further Reading

4. Auditing The Previous Run Is Effortless

When Jenkins runs jobs, it will capture console output. For both stdout and stderr.

  • For troubleshooting, we know the history crystal clear. No need to human to capture the console output, and spend time organising them in a user-friendly way. Thinking the time saving for communication, it’s huge!
  • For performance tuning, we know how long each run took. Even for each individual job run, we can easily identify the slowest steps with the help of Timestamper plugin.

Further Reading

5. Project Management Now Has More Accurate Data Support

For project management, we know better about the status for each part. And this could be done automatically.

Each activity can be wrapped as a Jenkins job. For each Jenkins job, we know whether it succeeds or fails. And we also know how long it takes.

And Jenkins support REST API or SDK to poll these metrics. Project management now can have a more solid and accurate data support.

Dashboard View plugin can be your friends for this.

10 Must-Have Jenkins Plugins

Further Reading

Here Are Top #10 Jenkins Plugins I Use Every Day

Pipeline Plugin - Integrate multiple individual jobs to serve a bigger purpose

Slack Plugin - Keep everything posted to Slack, syncing everyone automatically

Timestamper - Add a timestamp to console output to easily identify slow steps

Dashboard View - Provides a dashboard/portal-like view, which is good for unstable builds and latest run history, and job performance diagrams etc

thinBackup - Backup jobs configurations and plugins, so fast migration is never a problem

JobConfigHistory Plugin - Audit who has changed job configurations, and when and what they did

Naginator Plugin - Automatically retry to reschedule a build after a build failure

Build-timeout - Abort a build automatically if it's taking too long

Git Plugin - Pull code from Git repos like Github or Bitbucket

GitHub pull request builder plugin - Trigger Jenkins test jobs from git pull requests automatically


About Denny Zhang

Denny has 9 years experience in the Cloud industry and holds the AWS Certified Solution Architect - Associate certificate, with deep experience with Amazon WebServices. He is also a certified Chef developer and is a Chef supermarket contributor with millions of downloads. He is also an OpenStack contributor on projects like heat, tempest and devstack. Denny holds a deep belief in the power of automation and is a diehard EMACS veteran.

To hear more from Denny, follow his blog, or connect with him on LinkedIn.