diff --git a/test-salt-formulas-pipeline.groovy b/test-salt-formulas-pipeline.groovy
index 37983c0..af22dc8 100644
--- a/test-salt-formulas-pipeline.groovy
+++ b/test-salt-formulas-pipeline.groovy
@@ -63,43 +63,43 @@
     [$class: 'StringParameterValue', name: 'SALT_VERSION', value: SALT_VERSION]
   ]
 }
-
-node("python") {
-  try {
-    stage("checkout") {
-      if (gerritRef) {
-        // job is triggered by Gerrit
-        def gerritChange = gerrit.getGerritChange(GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, CREDENTIALS_ID, true)
-        // test if gerrit change is already Verified
-        if (gerrit.patchsetHasApproval(gerritChange.currentPatchSet, "Verified", "+")) {
-          common.successMsg("Gerrit change ${GERRIT_CHANGE_NUMBER} patchset ${GERRIT_PATCHSET_NUMBER} already has Verified, skipping tests") // do nothing
-          // test WIP contains in commit message
-        } else if (gerritChange.commitMessage.contains("WIP")) {
-          common.successMsg("Commit message contains WIP, skipping tests") // do nothing
-        } else {
-          // test if change aren't already merged
-          def merged = gerritChange.status == "MERGED"
-          if (!merged) {
-            checkouted = gerrit.gerritPatchsetCheckout([
-              credentialsId: CREDENTIALS_ID
-            ])
+timeout(time: 12, unit: 'HOURS') {
+  node("python") {
+    try {
+      stage("checkout") {
+        if (gerritRef) {
+          // job is triggered by Gerrit
+          def gerritChange = gerrit.getGerritChange(GERRIT_NAME, GERRIT_HOST, GERRIT_CHANGE_NUMBER, CREDENTIALS_ID, true)
+          // test if gerrit change is already Verified
+          if (gerrit.patchsetHasApproval(gerritChange.currentPatchSet, "Verified", "+")) {
+            common.successMsg("Gerrit change ${GERRIT_CHANGE_NUMBER} patchset ${GERRIT_PATCHSET_NUMBER} already has Verified, skipping tests") // do nothing
+            // test WIP contains in commit message
+          } else if (gerritChange.commitMessage.contains("WIP")) {
+            common.successMsg("Commit message contains WIP, skipping tests") // do nothing
           } else {
-            common.successMsg("Change ${GERRIT_CHANGE_NUMBER} is already merged, no need to test them")
+            // test if change aren't already merged
+            def merged = gerritChange.status == "MERGED"
+            if (!merged) {
+              checkouted = gerrit.gerritPatchsetCheckout([
+                credentialsId: CREDENTIALS_ID
+              ])
+            } else {
+              common.successMsg("Change ${GERRIT_CHANGE_NUMBER} is already merged, no need to test them")
+            }
           }
+          defaultGitUrl = "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}"
+          defaultGitRef = GERRIT_REFSPEC
+        } else if (defaultGitRef && defaultGitUrl) {
+          checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
+        } else {
+          throw new Exception("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
         }
-        defaultGitUrl = "${GERRIT_SCHEME}://${GERRIT_NAME}@${GERRIT_HOST}:${GERRIT_PORT}/${GERRIT_PROJECT}"
-        defaultGitRef = GERRIT_REFSPEC
-      } else if (defaultGitRef && defaultGitUrl) {
-        checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID)
-      } else {
-        throw new Exception("Cannot checkout gerrit patchset, GERRIT_REFSPEC and DEFAULT_GIT_REF is null")
-      }
     }
     stage("test") {
       if (checkouted) {
         try {
           saltVersion = SALT_VERSION
-        } catch (MissingPropertyException e) {
+            } catch (MissingPropertyException e) {
           saltVersion = "latest"
         }
         withEnv(["SALT_VERSION=${saltVersion}"]) {
@@ -108,52 +108,53 @@
       }
     }
     stage("kitchen") {
-      if (checkouted) {
-        if (fileExists(".kitchen.yml")) {
-          common.infoMsg(".kitchen.yml found, running kitchen tests")
-          def kitchenEnvs = []
-          def filteredEnvs = []
-          if (fileExists(".travis.yml")) {
-            common.infoMsg(".travis.yml file found.")
-            def kitchenConfigYML = readYaml(file: ".travis.yml")
-            if (kitchenConfigYML.containsKey("env")) {
-              kitchenEnvs = kitchenConfigYML["env"]
+        if (checkouted) {
+          if (fileExists(".kitchen.yml")) {
+            common.infoMsg(".kitchen.yml found, running kitchen tests")
+            def kitchenEnvs = []
+            def filteredEnvs = []
+            if (fileExists(".travis.yml")) {
+              common.infoMsg(".travis.yml file found.")
+              def kitchenConfigYML = readYaml(file: ".travis.yml")
+              if (kitchenConfigYML.containsKey("env")) {
+                kitchenEnvs = kitchenConfigYML["env"]
+              }
+            } else {
+              common.warningMsg(".travis.yml file not found, suites must be passed via CUSTOM_KITCHEN_ENVS parameter.")
             }
-          } else {
-            common.warningMsg(".travis.yml file not found, suites must be passed via CUSTOM_KITCHEN_ENVS parameter.")
-          }
-          common.infoMsg("Running kitchen testing in parallel mode")
-          if (CUSTOM_KITCHEN_ENVS != null && CUSTOM_KITCHEN_ENVS != '') {
-            kitchenEnvs = CUSTOM_KITCHEN_ENVS.tokenize('\n')
-            common.infoMsg("CUSTOM_KITCHEN_ENVS not empty. Running with custom enviroments: ${kitchenEnvs}")
-          }
-          if (kitchenEnvs != null && kitchenEnvs != '') {
-            def acc = 0
-            common.infoMsg("Found " + kitchenEnvs.size() + " environment(s)")
-            for (int i = 0; i < kitchenEnvs.size(); i++) {
-              futureFormulas << kitchenEnvs[i]
+            common.infoMsg("Running kitchen testing in parallel mode")
+            if (CUSTOM_KITCHEN_ENVS != null && CUSTOM_KITCHEN_ENVS != '') {
+              kitchenEnvs = CUSTOM_KITCHEN_ENVS.tokenize('\n')
+              common.infoMsg("CUSTOM_KITCHEN_ENVS not empty. Running with custom enviroments: ${kitchenEnvs}")
             }
-            setupRunner(defaultGitRef, defaultGitUrl)
-          } else {
-            common.warningMsg(".kitchen.yml file not found, no kitchen tests triggered.")
+            if (kitchenEnvs != null && kitchenEnvs != '') {
+              def acc = 0
+              common.infoMsg("Found " + kitchenEnvs.size() + " environment(s)")
+              for (int i = 0; i < kitchenEnvs.size(); i++) {
+                futureFormulas << kitchenEnvs[i]
+              }
+              setupRunner(defaultGitRef, defaultGitUrl)
+            } else {
+              common.warningMsg(".kitchen.yml file not found, no kitchen tests triggered.")
+            }
           }
         }
       }
-    }
-    if (failedFormulas) {
+      if (failedFormulas) {
+        currentBuild.result = "FAILURE"
+        common.warningMsg("The following tests failed: ${failedFormulas}")
+      }
+    } catch (Throwable e) {
+      // If there was an error or exception thrown, the build failed
       currentBuild.result = "FAILURE"
-      common.warningMsg("The following tests failed: ${failedFormulas}")
+      currentBuild.description = currentBuild.description ? e.message + " " + currentBuild.description : e.message
+      throw e
+    } finally {
+      if (currentBuild.result == "FAILURE" && fileExists(".kitchen/logs/kitchen.log")) {
+        common.errorMsg("----------------KITCHEN LOG:---------------")
+        println readFile(".kitchen/logs/kitchen.log")
+      }
+      common.sendNotification(currentBuild.result, "", ["slack"])
     }
-  } catch (Throwable e) {
-    // If there was an error or exception thrown, the build failed
-    currentBuild.result = "FAILURE"
-    currentBuild.description = currentBuild.description ? e.message + " " + currentBuild.description : e.message
-    throw e
-  } finally {
-    if (currentBuild.result == "FAILURE" && fileExists(".kitchen/logs/kitchen.log")) {
-      common.errorMsg("----------------KITCHEN LOG:---------------")
-      println readFile(".kitchen/logs/kitchen.log")
-    }
-    common.sendNotification(currentBuild.result, "", ["slack"])
   }
 }
