Implement single click deployment using Jenkins and DeployIt

Problem statement : Implement single click deployment using Jenkins and DeployIt
Tools used: Jenkins CI Server, DeplyIt Plugin for Jenkins, Github plugin for jenkins, Maven for building artifact.

Detailed use case :
Lets suppose we have our code in github in a public repository and we want that every fix which goes to “deployment” branch should get propagated to a dev environment automatically.

In order to get this set up working we would need to do:
1.) Configure Jenkins with gitHub and deployIt Plugin.
2.) Configure application placeholder and environment (including infrastructure) in which deployment would take place in DeployIt.
Read More »

chef-solo with vagrant

To learn the concepts of chef, we can start by using chef-solo with Vagrant.
See my previous post on Vagrant to install vagrant and know more about it.

Next, lets install chef-solo on our machine.
We will install chef-solo using ruby gem,(for both Linux and Mac) make sure you have ruby installed.

root@intro:~# cd ~
root@intro:~# sudo gem install chef
Thank you for installing Chef!

So, now we have installed chef-solo and vagrant on our machine.
In this exercise, we will try and install apache2 on an ubuntu virtual machine (virtual box)
using chef-solo and vagrant.
To begin we would first need to understand few concepts; which would be required to run chef-solo in Vagrant.
Read More »

What are Reentrant Locks?

In Java 5.0 a new addition was made to enhance the intrinsic locking capabilities, called as Reentrant Lock.
Prior to this, ‘synchronized’ and ‘volatile’ were the means for achieving concurrency.

public synchronized void doAtomicTransfer(){
     //enter synchronized block , acquire lock over this object.
    operation1()
    operation2();    
} // exiting synchronized block, release lock over this object.

Synchronized uses intrinsic locks or monitors. Every object in Java has an intrinsic lock associated with it. Whenever a thread tries to access a synchronized block or method it acquires the intrinsic lock or the monitor on that object. In case of static methods, the thread acquires the lock over the class object.
Intrinsic locking mechanism is a clean approach in terms of writing code and is pretty good for most of the use-cases. So why do we need additional feature of Explicit Locks? Lets discuss.

Read More »

Create an Ubuntu VM Using Vagrant and Virtual Box

I have been using Vagrant for some time with virtual box to play around with vms on my ubuntu machine.
Vagrant is a tool to help create and provision VirtualBox machines.Few of the reasons for using it would be:

1.) The development environment can be isolated from all the other junk that accumulates on my primary computer.
2.) The development environment can be tuned to match a production server environment as closely as possible.
3.) Provisioning scripts define the machine configuration in code. This means the configuration is repeatable and versionable.
So, lets play with it.
Read More »

Continuous Integration using Jenkins

Continuous Integration means that whenever a code is checked in it should :
1.)compile
2.)run unit test cases
3.) and create the build artifact.

In a project, many developers work on same files and if you don’t merge them daily or very frequently, chances are that it could become a huge task to merge the changes of each developer at a later stage. Moreover if something breaks it would be a nightmare to find out what went wrong.

By continuously integrating the code and compiling it we make sure that if something breaks it gets highlighted instantly and no new code comes on top of it until it is fixed.
Read More »

HTTP Caching explained

We all have noticed that opening of a webpage for the first time takes some time, but the second or third time it loads faster.

This happens because whenever we visit a webpage for the first time, our browser caches the content and need not have to make a call over the network to render it.

This caching ability of the browser saves a lot of network bandwidth and helps in cutting down the server load.
Read More »

10 Reasons why you should NOT write unit test cases!

Finaly, here is a blog in support of all those who feel writing unit test cases is a sheer waste of time.. or is it?? Lets see..

Below are few of the reasons:

1.) You are Neo (from The Matrix) , the ‘chosen one’

You can see the code getting executed as green binaries. You feel the code and understand every use case, you are just so rediculously genious that you don’t require any safety net of unit test cases to identify problems; you can see them with your naked eyes!

Read More »