diff --git a/jjb/pipeline/tost-deploy-onos.groovy b/jjb/pipeline/tost-deploy-onos.groovy
new file mode 100644
index 0000000..d2c062a
--- /dev/null
+++ b/jjb/pipeline/tost-deploy-onos.groovy
@@ -0,0 +1,131 @@
+pipeline {
+    agent {
+        docker {
+            image 'ubuntu:18.04'
+            args '-u root:sudo'
+        }
+    }
+    environment {
+        KUBECONFIG = credentials("${params.k8s_config}")
+        registry_password = credentials("${params.registry_password_env}")
+        git_password = credentials("${params.git_password_env}")
+        onos_password = credentials("${params.onos_password}")
+        rancher_token = credentials("${params.rancher_api_env}")
+    }
+    stages {
+        stage('Install tools') {
+            steps {
+                sh '''
+                set -x
+                apt-get update -y
+                apt-get install -y curl wget jq git
+
+                # Install kubectl
+                curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl"
+                chmod +x ./kubectl
+                mv ./kubectl /usr/local/bin/kubectl
+
+                # Install rancher
+                wget https://github.com/rancher/cli/releases/download/v2.4.5/rancher-linux-amd64-v2.4.5.tar.gz
+                tar -xvf rancher-linux-amd64-v2.4.5.tar.gz
+                mv rancher-v2.4.5/rancher /usr/local/bin
+
+                rm rancher-linux-amd64-v2.4.5.tar.gz
+                rm -rf rancher-v2.4.5
+
+                # Test Kubectl & Rancher
+                KUBE_CONFIG=$KUBECONFIG kubectl get nodes
+                rancher --version
+                '''
+            }
+        }
+        stage('Clone Config Repo') {
+            options {
+                timeout(time: 10, unit: "SECONDS")
+            }
+            steps {
+                sh '''
+                git clone https://${git_user}:${git_password}@${git_server}/${git_repo}
+                if [ ! -z ${config_review} ] && [ ! -z ${config_patchset} ]; then
+                    cd ${git_repo}
+                    CFG_LAST2=$(echo ${config_review} | tail -c 3)
+                    git fetch "https://${git_user}:${git_password}@${git_server}/a/${git_repo}" refs/changes/${CFG_LAST2}/${config_review}/${config_patchset} && git checkout FETCH_HEAD
+                    git checkout FETCH_HEAD
+                    echo "config.review: ${config_review}" >> deployment-configs/aether/apps/${config_env}/onos-ans.yml
+                    echo "config.patchset: ${config_patchset}" >> deployment-configs/aether/apps/${config_env}/onos-ans.yml
+                    cd ..
+                fi
+                '''
+             }
+        }
+        stage('Login Rancher') {
+            steps {
+                sh '''
+                rancher login ${rancher_server} --token ${rancher_token} --context ${rancher_context}:${rancher_project}
+                '''
+             }
+        }
+        stage('Push Secrets') {
+            steps {
+                sh '''
+
+                rancher namespaces ls | grep ${onos_ns} || rancher namespaces create ${onos_ns}
+
+                kubectl -n ${onos_ns} delete secret git-secret --ignore-not-found=true
+                kubectl -n ${onos_ns} create secret generic git-secret --from-literal=username=${git_user} --from-literal=password=${git_password}
+                kubectl -n ${onos_ns} delete secret aether-registry-credential --ignore-not-found=true
+                kubectl -n ${onos_ns} create secret docker-registry aether-registry-credential  --docker-server=${registry_server} --docker-username=${registry_user} --docker-password=${registry_password}
+
+
+
+                kubectl -n ${onos_ns} delete secret onos-secret --ignore-not-found=true
+                kubectl -n ${onos_ns} create secret generic onos-secret --from-literal=username=${onos_user} --from-literal=password=${onos_password}
+                '''
+            }
+        }
+
+        stage('Uninstall Apps') {
+            options {
+                timeout(time: 90, unit: "SECONDS")
+            }
+            steps {
+                sh '''
+                for app in $(rancher apps ls -q | grep -E '(onos-tost)'); do rancher apps delete $app; done
+
+                until [ "$(rancher apps ls -q | grep -E '(onos-tost)')" = "" ]; do echo "wait deleted apps"; rancher apps ls ; sleep 1; done
+                '''
+             }
+        }
+        stage('Remove PVC') {
+            options {
+                timeout(time: 300, unit: "SECONDS")
+            }
+            steps {
+                sh '''
+                pvcs=$(kubectl -n onos-tost get pvc -lapp=onos-tost-atomix -o name)
+                for pv in $pvcs; do kubectl -n onos-tost delete $pv; done
+                '''
+             }
+        }
+        stage('Install apps') {
+            options {
+                timeout(time: 600, unit: "SECONDS")
+            }
+            steps {
+                sh '''
+                cd ${git_repo}/deployment-configs/aether/apps/${config_env}/
+
+                until rancher apps install --answers onos-ans.yml --namespace ${onos_ns} cattle-global-data:${onos_catalog_name}-onos-tost onos-tost; do :; done
+                apps=$(rancher apps -q | grep onos-tost)
+                for app in $apps; do until rancher wait $app --timeout 20; do :; done; rancher apps ls; done
+                '''
+             }
+        }
+
+    }
+    post {
+        always {
+            cleanWs()
+        }
+    }
+}
