diff --git a/test-salt-models-pipeline.groovy b/test-salt-models-pipeline.groovy
index fed6ed5..622b86a 100644
--- a/test-salt-models-pipeline.groovy
+++ b/test-salt-models-pipeline.groovy
@@ -28,7 +28,6 @@
 }
 def checkouted = false
 def merged = false
-
 node("python&&docker") {
   try{
     stage("checkout") {
@@ -62,20 +61,18 @@
     }
 
     stage("test-nodes") {
-      dir ('nodes') {
-        def nodes = sh script: "find ./ -type f -name 'cfg*.yml'", returnStdout: true
-        def buildSteps = [:]
-        def partitions = common.partitionList(nodes.tokenize(), 3)
-        for (int i=0; i< partitions.size();i++) {
-          def partition = partitions[i]
-          buildSteps.put("partition-${i}", new HashMap<String,org.jenkinsci.plugins.workflow.cps.CpsClosure2>())
-          for(int k=0; k < partition.size;k++){
-              def basename = sh(script: "basename ${partition[k]} .yml", returnStdout: true).trim()
-              buildSteps.get("partition-${i}").put(basename, { setupAndTestNode(basename) })
-          }
+      def nodes = sh script: "find ./nodes -type f -name 'cfg*.yml'", returnStdout: true
+      def buildSteps = [:]
+      def partitions = common.partitionList(nodes.tokenize(), 3)
+      for (int i=0; i< partitions.size();i++) {
+        def partition = partitions[i]
+        buildSteps.put("partition-${i}", new HashMap<String,org.jenkinsci.plugins.workflow.cps.CpsClosure2>())
+        for(int k=0; k < partition.size;k++){
+            def basename = sh(script: "basename ${partition[k]} .yml", returnStdout: true).trim()
+            buildSteps.get("partition-${i}").put(basename, { setupAndTestNode(basename) })
         }
-        common.serial(buildSteps)
       }
+      common.serial(buildSteps)
     }
 
   } catch (Throwable e) {
