I'm trying to loop over a var that contains multiple strings (file paths), 
and then run a shell script against each one. But for some reason 
everything i try loops over every single letter of the string. Here is my 
code:

def call(Map config) {

  node('terraform-slave') {
    cleanWs()
    checkout scm

    stage('Plan') {
      commitChangeset = sh(returnStdout: true, script: 'git diff-tree 
--no-commit-id --name-only -r HEAD').trim()
    }
    stage('EchoToVerify') {
      tfvars = commitChangeset.replaceAll("terraform.tfvars", "")
      echo tfvars
    }
    stage('Loop') {
      loop(tfvars)
    }
  }
}

def loop(list) {
  list.each {
    sh "(cd ${it}; cat terraform.tfvars)"
  }
}



If you see the EchoToVerify stage, that works fine. Multiple file paths are 
echo'ed, like so:

/file/to/dir1
/file/to/dir2
/file/to/dir3

But when the Loop starts, it loops against each letter.. f, i, l, e, etc....

The only way I have been able to get it work is is by doing this:

def loop(list) {
  for (dir in [list]) {
    sh "(cd ${it}; cat terraform.tfvars)"
  }
}

However it only works when there is one value in the variable. It seems to 
want to iterate over ${it} immediately, before going to the next shell 
command (cat terraform.tfvars). It seems like it tries to "cd" to the next 
directory immediately.

Thanks for the help!




-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/3b411f4a-56f4-4c04-a9a4-6fde13f2239e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to