Skip to main content

Everything I know about Jenkins - Part 1

I have been working with Jenkins for over an year as a user, developer, customization programmer and providing operations support for Jenkins at Blue Shield of California. I started playing with Jenkins by running it on my laptop as a standalone jar. I moved on to running it on Tomcat in a VirtualBox VM. Later, I created reusable a Vagrant box for the same. Then I got hooked on Docker and created a replica of a production Jenkins server as a Docker container.

1. What is Jenkins?
Jenkins is an open source tool that allows organizations to perform continuous integration and continuous delivery (CICD) of all their software applications through automated builds and deployments. The creator of Jenkins is Kohsuke Kawaguchi. I had the pleasure of meeting him at a Jenkins conference in San Francisco.

2. Are there other options?
Yes. Teamcity from JetBrains, Bamboo from Atlassian. There may be others and I have not tried them.

3. Do I need any other tools or software to perform CICD with Jenkins?
Yes. Jenkins is just one of the tools needed for CICD. Other tools include, source control, bug tracker, wiki, automated test execution suite, document or artifact storage tool, compilers, archiving software and in some cases infrastructure automation tools like Puppet.

4. What is under the hood?
Under the hood, the source code of Jenkins is written in Java. There is no database. Instead, configuration and build logs are stored on the hard drive. Whenever the Jenkins app is fired up, either as a standalone jar or as a web application deployed on a J2EE container based web server like Tomcat, the app reads configuration and build job information from the hard drive and does a good job of caching everything so there is no performance lag when a user needs to run a job. Also, under the hood, Jenkins was an offshoot of the popular build tool Hudson. Long story.

5. Which version should I use?
Irrespective of the level of experience with Jenkins, the latest or the second to latest LTS version (Long-Term Support) is recommended. LTS versions are most stable, with fewer bugs than the general release versions and as the name suggests, support is provided for a longer term than the general release versions.

6. Does Jenkins integrate with other software?
Yes and it integrates a little too well. There are Jenkins plug-ins for just about any software tool or API that one can install on the Jenkins instance and configure the integration on the Jenkins front end. If there is no plug-in for a particular tool or software that you currently use, building a Jenkins plug-in from scratch is a piece of cake.

7. What is the quickest way to get started with Jenkins?
Download the latest LTS release version from for your operating system and follow the installation instructions. The really quick way of doing it is with Docker. Just execute "docker pull jenkins" on command line or follow instructions on Docker hub.

8. Why would I want to use Jenkins?
a. Automate builds and deployments of software applications
b. Orchestrate a complete cycle to compile code, run unit tests, perform static analysis of code, deploy the code to a test environment, execute automated smoke tests in the test environment and then deploy the code in production if all the prior steps are successful.
c. Or perform each of the above operations separately.
d. Get notified via email if any of the orchestration steps fail.

Jenkins is a Java based tool. The options for customization are limited to the available hardware resources. One can integrate just about any software product to work with Jenkins.

If you anticipate performing a task more than once, "automate it and get it right the first time". Jenkins provides the means to simplify the automation part.

Popular posts from this blog

A @trello board to get kids excited

My 8 year old just started his summer break. He did so well in school and I am proud of him. He skipped second grade, got into the gold honor roll in every quarter and got a medal for doing that. Last night, I promised to install a new app for him on his iPad mini. I installed Trello and created a board for him while he watched. I showed him how to create cards, add labels to them and move them from To Do, to Doing to Done. I had him create some cards and label them. He could not stop creating cards. I could not convince him to go to bed after that. He created cards for everything he wants to do in the summer and he is not done with creating cards. He even created a card to email a screenshot of his Trello board to his teacher.

Later last night, he was still awake in bed when I checked on him. He told me that he wanted to add three more labels - Math, Science and One-on-One. He wanted a label titled 'One-on-one' for tasks that he wants to do with me and he wants one-on-one att…

A @trello board to get kids excited - continued

This is a continuation of the previous post titled - A trello board to get kids excited. At the time of writing this post, the previous post had 198 page views. I wish people commented. I did get some positive feedback on Twitter. The Trello twitter account re-tweeted my tweet and also sent out a second tweet advertising the page. Thank you very much. I hope a lot of parents and kids benefited and had fun as a result.

Trello people: Idea - How about a 'Trello Kiddo'? Perhaps you could offer that to schools that give iPads for each kid to take home with them. Get them when they are young.

When a kid does something religiously, regularly and feels great about it and can't wait to tell everyone about it, you know you've done well as a parent. We realized that we needed a separate column to keep track of 'Special accomplishments'. Positive reinforcement that you can see with your eyes!

Some parents feel like they haven't done enough for their kids, particularly…

#Git starter cheat sheet

Initialize a local repo Run the following command in the folder where you would like to initialize a git repo.
git init
Get status It is a good practice to frequently run check on status during development. The following command points out the changes between the previous commit and current state of the folder.
git status
Add content To add an untracked file named ‘text.txt’ to the staging area, execute the following command.
git add text.txt
Syntax: git add <filename>
Commit changes To commit changes made to the folder, execute the following command. The message will be used as a commit message to associate this check-in with the message.
git commit –m “Add text.txt to the code base.”
Syntax: git commit –m “<Commit message>”
Add using wild card To add multiple files using a wild card character, execute the following command.
git add ‘*.txt’
Syntax: git add ‘<wildcard_character+string>’
Check history Review commit history using the following command.
git log
Add Remote re…