diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..e00fa09ebb928b896d2f35ead50a022cdf16ebba
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,7 @@
+FROM circleci/node:8.11.2-stretch as build
+MAINTAINER "Kartheek Palla" "kartheekp@ilimi.in"
+USER root
+COPY src /opt/program-service/
+WORKDIR /opt/program-service/
+RUN npm install
+CMD ["node", "app.js", "&"]
\ No newline at end of file
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000000000000000000000000000000000000..5f3d085ff6d59d1b849b411645469e2ea4776ec0
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,52 @@
+node('build-slave') {
+    try {
+        String ANSI_GREEN = "\u001B[32m"
+        String ANSI_NORMAL = "\u001B[0m"
+        String ANSI_BOLD = "\u001B[1m"
+        String ANSI_RED = "\u001B[31m"
+        String ANSI_YELLOW = "\u001B[33m"
+
+        ansiColor('xterm') {
+            stage('Checkout') {
+                if (!env.hub_org) {
+                    println(ANSI_BOLD + ANSI_RED + "Uh Oh! Please set a Jenkins environment variable named hub_org with value as registery/sunbidrded" + ANSI_NORMAL)
+                    error 'Please resolve the errors and rerun..'
+                }
+                else
+                    println(ANSI_BOLD + ANSI_GREEN + "Found environment variable named hub_org with value as: " + hub_org + ANSI_NORMAL)
+                cleanWs()
+                if (params.github_release_tag == "") {
+                    checkout scm
+                    commit_hash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
+                    branch_name = sh(script: 'git name-rev --name-only HEAD | rev | cut -d "/" -f1| rev', returnStdout: true).trim()
+                    build_tag = branch_name + "_" + commit_hash
+                    println(ANSI_BOLD + ANSI_YELLOW + "github_release_tag not specified, using the latest commit hash: " + commit_hash + ANSI_NORMAL)
+                }
+                else {
+                    def scmVars = checkout scm
+                    checkout scm: [$class: 'GitSCM', branches: [[name: "refs/tags/$params.github_release_tag"]], userRemoteConfigs: [[url: scmVars.GIT_URL]]]
+                    build_tag = params.github_release_tag
+                    println(ANSI_BOLD + ANSI_YELLOW + "github_release_tag specified, building from github_release_tag: " + params.github_release_tag + ANSI_NORMAL)
+                }
+                echo "build_tag: " + build_tag
+            }
+
+            stage('Build') {
+                env.NODE_ENV = "build"
+                print "Environment will be : ${env.NODE_ENV}"
+                sh('chmod 777 build.sh')
+                sh("./build.sh ${build_tag} ${env.NODE_NAME} ${hub_org}")
+            }
+            stage('ArchiveArtifacts') {
+                archiveArtifacts "metadata.json"
+                currentBuild.description = "${build_tag}"
+            }
+        }
+
+    }
+    catch (err) {
+        currentBuild.result = "FAILURE"
+        throw err
+    }
+
+}
\ No newline at end of file
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a0aa427049949d4e781e42b3006834690c7ee6d6
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+# Build script
+set -eo pipefail
+build_tag=$1
+name=program-service
+node=$2
+org=$3
+
+docker build -f ./Dockerfile --label commitHash=$(git rev-parse --short HEAD) -t ${org}/${name}:${build_tag} .
+echo {\"image_name\" : \"${name}\", \"image_tag\" : \"${build_tag}\", \"node_name\" : \"$node\"} > metadata.json
\ No newline at end of file