In this post I'll demonstrate a simple CD system, that based on a merge to the Master branch for a project on Github will package, push and deploy a small RESTfull application.
The setup consists of a single Jenkins server, a load balancer node running HAProxy and two API servers running Apache with the libapache2-mod-wsgi module to drive the Python Bottle microframework.
First let's create the local git repository:
Create a new project on Github, and deploy your public key to it:
Next, test that you can connect using the deployed SSH key and push to the Master branch:
Let's build the Jenkins server:
Once you login to Jenkins create a new project:
Or you can copy the following config file to /var/lib/jenkins/jobs/RESTfull-CI-Pipeline:
Make sure you have the github plugin installed on Jenkins for this to work.
Lastly on the Github side, add a service that will call the Jenkins API when an event is triggered e.g. merge to Master:
Time to setup the API nodes:
And finally the load balancer node:
Now every time you merge a commit to Master, Github will POST to the Jenkins API, and Jenkins will execute the job, building a debian package, and deploying it to the API nodes.
To test the simple RESTfull API run: