diff --git a/cicd-lab-pipeline.groovy b/cicd-lab-pipeline.groovy
index adaedd0..a9f4edd 100644
--- a/cicd-lab-pipeline.groovy
+++ b/cicd-lab-pipeline.groovy
@@ -120,7 +120,9 @@
 
             stage("Deploy GlusterFS") {
                 salt.enforceState(saltMaster, 'I@glusterfs:server', 'glusterfs.server.service', true)
-                salt.enforceState(saltMaster, 'ci01*', 'glusterfs.server.setup', true)
+                retry(2) {
+                    salt.enforceState(saltMaster, 'ci01*', 'glusterfs.server.setup', true)
+                }
                 sleep(5)
                 salt.enforceState(saltMaster, 'I@glusterfs:client', 'glusterfs.client', true)
                 print common.prettyPrint(salt.cmdRun(saltMaster, 'I@glusterfs:client', 'mount|grep fuse.glusterfs || echo "Command failed"'))
@@ -140,6 +142,10 @@
                 print common.prettyPrint(salt.cmdRun(saltMaster, 'I@docker:swarm:role:master', 'docker node ls'))
             }
 
+            stage("Configure OSS services") {
+                salt.enforceState(saltMaster, 'I@devops_portal:config', 'devops_portal.config')
+            }
+
             stage("Deploy Docker services") {
                 salt.enforceState(saltMaster, 'I@docker:swarm:role:master', 'docker.client')
             }
@@ -259,10 +265,12 @@
 
     And visit services running at 172.16.10.254 (vip address):
 
-        9600    haproxy stats
-        8080    gerrit
-        8081    jenkins
+        9600    HAProxy statistics
+        8080    Gerrit
+        8081    Jenkins
         8089    LDAP administration
+        4440    Rundeck
+        8084    DevOps Portal
         8091    Docker swarm visualizer
         8090    Reclass-generated documentation
 
diff --git a/gating-pipeline.groovy b/gating-pipeline.groovy
index d3feae0..4efb430 100644
--- a/gating-pipeline.groovy
+++ b/gating-pipeline.groovy
@@ -11,9 +11,7 @@
 node("python") {
   try{
     stage("test") {
-      // TEST JOBS ARE DISABLED
-      // because you cannot pass GERRIT_REFSPEC like variables to another pipeline
-      if (false && !SKIP_TEST.equals("true")){
+      if (!SKIP_TEST.equals("true")){
         wrap([$class: 'AnsiColorBuildWrapper']) {
           def gerritProjectArray = GERRIT_PROJECT.tokenize("/")
           def gerritProject = gerritProjectArray[gerritProjectArray.size() - 1]
@@ -26,12 +24,8 @@
           if (_jobExists(testJob)) {
             common.infoMsg("Test job ${testJob} found, running")
             build job: testJob, parameters: [
-              [$class: 'StringParameterValue', name: 'GERRIT_BRANCH', value: GERRIT_BRANCH],
-              [$class: 'StringParameterValue', name: 'GERRIT_NAME', value: GERRIT_NAME],
-              [$class: 'StringParameterValue', name: 'GERRIT_HOST', value: GERRIT_HOST],
-              [$class: 'StringParameterValue', name: 'GERRIT_PORT', value: GERRIT_PORT],
-              [$class: 'StringParameterValue', name: 'GERRIT_PROJECT', value: GERRIT_PROJECT],
-              [$class: 'StringParameterValue', name: 'GERRIT_REFSPEC', value: GERRIT_REFSPEC]
+              [$class: 'StringParameterValue', name: 'DEFAULT_GIT_URL', value: "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}.git"],
+              [$class: 'StringParameterValue', name: 'DEFAULT_GIT_REF', value: GERRIT_REFSPEC]
             ]
           } else {
             common.infoMsg("Test job ${testJob} not found")
@@ -52,7 +46,7 @@
      currentBuild.result = "FAILURE"
      throw e
   } finally {
-     common.sendNotification(currentBuild.result,"",["slack"])
+     //common.sendNotification(currentBuild.result,"",["slack"])
   }
 }
 
diff --git a/lab-pipeline.groovy b/lab-pipeline.groovy
index b4014b6..5b7cc11 100644
--- a/lab-pipeline.groovy
+++ b/lab-pipeline.groovy
@@ -41,7 +41,7 @@
 openstack = new com.mirantis.mk.Openstack()
 salt = new com.mirantis.mk.Salt()
 common = new com.mirantis.mk.Common()
-
+test = new com.mirantis.mk.Test()
 
 timestamps {
     node {
diff --git a/test-groovy-pipeline.groovy b/test-groovy-pipeline.groovy
index 45404cb..71e9fc0 100644
--- a/test-groovy-pipeline.groovy
+++ b/test-groovy-pipeline.groovy
@@ -9,30 +9,50 @@
 gerrit = new com.mirantis.mk.Gerrit()
 common = new com.mirantis.mk.Common()
 
+def gerritRef
+try {
+  gerritRef = GERRIT_REFSPEC
+} catch (MissingPropertyException e) {
+  gerritRef = null
+}
+
+def defaultGitRef, defaultGitUrl
+try {
+    defaultGitRef = DEFAULT_GIT_REF
+    defaultGitUrl = DEFAULT_GIT_URL
+} catch (MissingPropertyException e) {
+    defaultGitRef = null
+    defaultGitUrl = null
+}
+def checkouted = false
+
 node("docker"){
     try {
         stage ('Checkout source code'){
-            gerrit.gerritPatchsetCheckout ([
-              credentialsId : CREDENTIALS_ID,
-              withWipeOut : true,
-              gerritRefSpec: GERRIT_REFSPEC,
-              gerritName: GERRIT_NAME,
-              gerritHost: GERRIT_HOST,
-              gerritPort: GERRIT_PORT,
-              gerritProject: GERRIT_PROJECT,
-              gerritBranch: GERRIT_BRANCH,
+          if (gerritRef) {
+            // job is triggered by Gerrit
+            checkouted = gerrit.gerritPatchsetCheckout ([
+              credentialsId : CREDENTIALS_ID
             ])
+          } else if(defaultGitRef && defaultGitUrl) {
+              checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
+          }
+          if(!checkouted){
+            common.errorMsg("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
+          }
         }
         stage ('Run Codenarc tests'){
-            def workspace = common.getWorkspace()
-            def jenkinsUID = common.getJenkinsUid()
-            def jenkinsGID = common.getJenkinsGid()
-            def gradle_report = sh (script: "docker run --rm -v ${workspace}:/usr/bin/app:rw -u ${jenkinsUID}:${jenkinsGID} ${GRADLE_IMAGE} ${GRADLE_CMD}", returnStdout: true).trim()
-            // Compilation failure doesn't fail the build
-            // Check gradle output explicitly
-            common.infoMsg(gradle_report)
-            if ( gradle_report =~ /Compilation failed/ ) {
-                throw new Exception("COMPILATION FAILED!")
+            if(checkouted){
+              def workspace = common.getWorkspace()
+              def jenkinsUID = common.getJenkinsUid()
+              def jenkinsGID = common.getJenkinsGid()
+              def gradle_report = sh (script: "docker run --rm -v ${workspace}:/usr/bin/app:rw -u ${jenkinsUID}:${jenkinsGID} ${GRADLE_IMAGE} ${GRADLE_CMD}", returnStdout: true).trim()
+              // Compilation failure doesn't fail the build
+              // Check gradle output explicitly
+              common.infoMsg(gradle_report)
+              if ( gradle_report =~ /Compilation failed/ ) {
+                  throw new Exception("COMPILATION FAILED!")
+              }
             }
         }
 
diff --git a/test-nodejs-pipeline.groovy b/test-nodejs-pipeline.groovy
index 7e31d33..35d8317 100644
--- a/test-nodejs-pipeline.groovy
+++ b/test-nodejs-pipeline.groovy
@@ -27,7 +27,7 @@
         stage ('Execute commands') {
             assert containerID != null
             def cmds = COMMANDS.tokenize('\n')
-            for (int i = 0; i < cmds.size(), i++) {
+            for (int i = 0; i < cmds.size(); i++) {
                def cmd = cmds[i]
                def output = sh(
                    script: "docker exec ${containerID} ${cmd}",
diff --git a/test-salt-formulas-pipeline.groovy b/test-salt-formulas-pipeline.groovy
index 2a3b2ac..91f977b 100644
--- a/test-salt-formulas-pipeline.groovy
+++ b/test-salt-formulas-pipeline.groovy
@@ -1,16 +1,51 @@
+/**
+ * Test salt formulas pipeline
+ *  DEFAULT_GIT_REF
+ *  DEFAULT_GIT_URL
+ *  CREDENTIALS_ID
+ */
 def common = new com.mirantis.mk.Common()
 def gerrit = new com.mirantis.mk.Gerrit()
+
+def gerritRef
+try {
+  gerritRef = GERRIT_REFSPEC
+} catch (MissingPropertyException e) {
+  gerritRef = null
+}
+
+def defaultGitRef, defaultGitUrl
+try {
+    defaultGitRef = DEFAULT_GIT_REF
+    defaultGitUrl = DEFAULT_GIT_URL
+} catch (MissingPropertyException e) {
+    defaultGitRef = null
+    defaultGitUrl = null
+}
+
+def checkouted = false;
+
 node("python") {
   try{
     stage("checkout") {
-      gerrit.gerritPatchsetCheckout ([
+      if (gerritRef) {
+        // job is triggered by Gerrit
+        checkouted = gerrit.gerritPatchsetCheckout ([
           credentialsId : CREDENTIALS_ID
-      ])
+        ])
+      } else if(defaultGitRef && defaultGitUrl) {
+          checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
+      }
+      if(!checkouted){
+        common.errorMsg("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
+      }
     }
     stage("test") {
-      wrap([$class: 'AnsiColorBuildWrapper']) {
-        sh("make clean")
-        sh("[ $SALT_VERSION != 'latest' ] || export SALT_VERSION=''; make test")
+      if(checkouted){
+        wrap([$class: 'AnsiColorBuildWrapper']) {
+          sh("make clean")
+          sh("[ $SALT_VERSION != 'latest' ] || export SALT_VERSION=''; make test")
+        }
       }
     }
   } catch (Throwable e) {
diff --git a/test-salt-models-pipeline.groovy b/test-salt-models-pipeline.groovy
index 7ac0e81..05695b2 100644
--- a/test-salt-models-pipeline.groovy
+++ b/test-salt-models-pipeline.groovy
@@ -1,3 +1,11 @@
+
+/**
+ *  Test salt models pipeline
+ *  DEFAULT_GIT_REF
+ *  DEFAULT_GIT_URL
+ *  CREDENTIALS_ID
+ */
+
 def common = new com.mirantis.mk.Common()
 def gerrit = new com.mirantis.mk.Gerrit()
 def ssh = new com.mirantis.mk.Ssh()
@@ -10,53 +18,46 @@
   gerritRef = null
 }
 
-def systemGitRef, systemGitUrl
+def defaultGitRef, defaultGitUrl
 try {
-    systemGitRef = RECLASS_SYSTEM_GIT_REF
-    systemGitUrl = RECLASS_SYSTEM_GIT_URL
+    defaultGitRef = DEFAULT_GIT_REF
+    defaultGitUrl = DEFAULT_GIT_URL
 } catch (MissingPropertyException e) {
-    systemGitRef = null
-    systemGitUrl = null
+    defaultGitRef = null
+    defaultGitUrl = null
 }
+def checkouted = false
 
 node("python") {
   try{
     stage("checkout") {
       if (gerritRef) {
-        gerrit.gerritPatchsetCheckout ([
-          credentialsId : CREDENTIALS_ID,
-          gerritRefSpec: GERRIT_REFSPEC,
-          gerritName: GERRIT_NAME,
-          gerritHost: GERRIT_HOST,
-          gerritPort: GERRIT_PORT,
-          gerritProject: GERRIT_PROJECT,
-          gerritBranch: GERRIT_BRANCH,
+        // job is triggered by Gerrit
+        checkouted = gerrit.gerritPatchsetCheckout ([
+          credentialsId : CREDENTIALS_ID
         ])
-      } else {
-        git.checkoutGitRepository('.', GIT_URL, "master", CREDENTIALS_ID)
+      } else if(defaultGitRef && defaultGitUrl) {
+          checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
       }
-
-      if (fileExists('classes/system')) {
-        ssh.prepareSshAgentKey(CREDENTIALS_ID)
-        dir('classes/system') {
-          remoteUrl = git.getGitRemote()
-          ssh.ensureKnownHosts(remoteUrl)
-        }
-        ssh.agentSh("git submodule init; git submodule sync; git submodule update --recursive")
-
-        if (systemGitRef) {
-          common.infoMsg("Fetching alternate system reclass (${systemGitUrl} ${systemGitRef})")
+      if(checkouted){
+        if (fileExists('classes/system')) {
+          ssh.prepareSshAgentKey(CREDENTIALS_ID)
           dir('classes/system') {
-            ssh.ensureKnownHosts(RECLASS_SYSTEM_GIT_URL)
-            ssh.agentSh("git fetch ${systemGitUrl} ${systemGitRef} && git checkout FETCH_HEAD")
+            remoteUrl = git.getGitRemote()
+            ssh.ensureKnownHosts(remoteUrl)
           }
+          ssh.agentSh("git submodule init; git submodule sync; git submodule update --recursive")
         }
+      }else{
+        common.errorMsg("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
       }
     }
     stage("test") {
-      timeout(1440) {
-        wrap([$class: 'AnsiColorBuildWrapper']) {
-          sh("make test")
+      if(checkouted){
+        timeout(1440) {
+          wrap([$class: 'AnsiColorBuildWrapper']) {
+            sh("make test")
+          }
         }
       }
     }
diff --git a/test-system-reclass-pipeline.groovy b/test-system-reclass-pipeline.groovy
index 6094b43..a63a7df 100644
--- a/test-system-reclass-pipeline.groovy
+++ b/test-system-reclass-pipeline.groovy
@@ -8,29 +8,57 @@
     gerritCredentials = "gerrit"
 }
 
+def gerritRef
+try {
+  gerritRef = GERRIT_REFSPEC
+} catch (MissingPropertyException e) {
+  gerritRef = null
+}
+
+def defaultGitRef, defaultGitUrl
+try {
+    defaultGitRef = DEFAULT_GIT_REF
+    defaultGitUrl = DEFAULT_GIT_URL
+} catch (MissingPropertyException e) {
+    defaultGitRef = null
+    defaultGitUrl = null
+}
+def checkouted = false
+
 try {
   stage("Checkout") {
     node() {
-      gerrit.gerritPatchsetCheckout ([
-        credentialsId : gerritCredentials
-      ])
+      if (gerritRef) {
+        // job is triggered by Gerrit
+        checkouted = gerrit.gerritPatchsetCheckout ([
+          credentialsId : gerritCredentials
+        ])
+        // change defaultGit variables if job triggered from Gerrit
+        defaultGitUrl = "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}"
+      } else if(defaultGitRef && defaultGitUrl) {
+          checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", gerritCredentials)
+      }
     }
   }
 
   stage("Test") {
-    def branches = [:]
-    def testModels = TEST_MODELS.split(',')
-
-    for (int i = 0; i < testModels.size(); i++) {
-      def cluster = testModels[i]
-      branches["${cluster}"] = {
-        build job: "test-salt-model-${cluster}", parameters: [
-          [$class: 'StringParameterValue', name: 'RECLASS_SYSTEM_GIT_URL', value: "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}.git"],
-          [$class: 'StringParameterValue', name: 'RECLASS_SYSTEM_GIT_REF', value: GERRIT_REFSPEC]
-        ]
-      }
+    if(checkouted){
+      def branches = [:]
+      def testModels = TEST_MODELS.split(',')
+        for (int i = 0; i < testModels.size(); i++) {
+          def cluster = testModels[i]
+          def clusterGitUrl = defaultGitUrl.substring(0, defaultGitUrl.lastIndexOf("/") + 1) + cluster
+          branches["${cluster}"] = {
+            build job: "test-salt-model-${cluster}", parameters: [
+              [$class: 'StringParameterValue', name: 'DEFAULT_GIT_URL', value: clusterGitUrl],
+              [$class: 'StringParameterValue', name: 'DEFAULT_GIT_REF', value: "HEAD"]
+            ]
+          }
+        }
+      parallel branches
+    }else{
+       common.errorMsg("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
     }
-    parallel branches
   }
 } catch (Throwable e) {
     // If there was an error or exception thrown, the build failed
