diff --git a/Jenkinsfile.release b/Jenkinsfile.release
new file mode 100644
index 0000000..d2b808c
--- /dev/null
+++ b/Jenkinsfile.release
@@ -0,0 +1,68 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+def app = ${app}
+def version = ${version}
+def branch = ${branch}
+
+def createBranch(def proj, def branch, def parent) {
+    cmd = 'ssh -p 29418 gerrit.opencord.org gerrit create-branch ' + proj + " " + branch + " " + parent
+    sh returnStdout: true, script: cmd
+}
+
+int checkBranchExists(def proj, def branch) {
+    url = 'https://gerrit.opencord.org/projects/' + proj + '/branches/' + branch
+    response = httpRequest url: url, validResponseCodes: '200,404'
+    if (response.status == 404) {
+        return 1
+    }
+    return 0
+}
+
+node ('master') {
+    stage 'Checkout code'
+    #checkout([$class: 'RepoScm', currentBranch: true, manifestRepositoryUrl: 'https://gerrit.opencord.org/manifest', #quiet: true])
+    checkout([$class: 'GitSCM',
+        userRemoteConfigs: [[url: 'https://gerrit.opencord.org/' + app]]
+    ])
+
+    
+    #stage 'Create support branch'
+    # TODO add a sanity check from human
+    #if (checkBranchExists(app, branch) == 0) {
+	#	echo "Branch " + branch + " doesn't exist, creating
+		#createBranch(app, version, 'opencord/master')
+	#} else {
+	#	echo "Support branch " + branch + " already exists"
+	#}
+	
+	stage 'Checkout branch'
+	sh 'cd ' + app + ' && git checkout ' + branch
+    	
+	stage 'Bump versions'
+	sh 'cd ' + app + ' && mvn change-version'
+	
+	#stage 'Commit'
+	
+	#stage 'Push to Gerrit'
+	
+	#stage 'Tag'
+    
+    #stage 'Build and Publish apps'
+    #sh 'cd onos-apps && ./gradlew release'
+    
+    #stage 'Bump versions forward on branch'
+    
+    #stage 'Bump versions forward on master'
+}
