I'm required to read values from a file in my pipeline. I'm using split() which puts them into an Array. I need to put them into an Arraylist so I'm using Arrays.asList(). The problem I'm having is I'm unable to use the size() or length() methods so I cannot make a for loop such as
for (ii = 0; ii < var.length; ii++) or
for (ii = 0; ii < var.size; ii++) because I get error: unclassified field java.util.Arrays$ArrayList length
So I tried to use a for each loop, but when I take some action (like ls command for example) in my finally block it only iterates 1 time. But if I just run the command 'echo' it iterates for each element like it's supposed to. Any advice on how to modify my code to get it to iterate for each element in the list when using any command?
Works correctly....
node{ wrap([$class: 'ConfigFileBuildWrapper', managedFiles: [[fileId: 'dest_hosts.txt', targetLocation: '', variable: 'DEST_HOST']]]) { HOST = Arrays.asList(readFile(env.DEST_HOST).split("\\r?\\n")) deploy(HOST) } } @NonCPS def deploy(host){ for (String target : host){ try { echo target } finally { echo target } } } OUTPUT (iterates for each element):
[Pipeline] node Running on <obfuscated> [Pipeline] { [Pipeline] wrap provisoning config files... copy managed file [<obfuscated>] to file:/var/lib/jenkins/<obfuscated> [Pipeline] { [Pipeline] readFile [Pipeline] echo www.testhost.com [Pipeline] echo www.testhost.com [Pipeline] echo www.testhost2.com [Pipeline] echo www.testhost2.com [Pipeline] } Deleting 1 temporary files [Pipeline] // wrap [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS But if I take some action such as 'ls -l' it only iterates 1 time
node{ wrap([$class: 'ConfigFileBuildWrapper', managedFiles: [[fileId: 'dest_hosts.txt', targetLocation: '', variable: 'DEST_HOST']]]) { HOST = Arrays.asList(readFile(env.DEST_HOST).split("\\r?\\n")) deploy(HOST) } } @NonCPS def deploy(host){ for (String target : host){ try { echo target } finally { sh 'ls -l' } } } OUTPUT (only iterates 1 time):
[Pipeline] node Running on <obfuscated> [Pipeline] { [Pipeline] wrap provisoning config files... copy managed file [<obfuscated>] to file:/var/lib/jenkins/<obfuscated> [Pipeline] { [Pipeline] readFile [Pipeline] echo www.testhost.com [Pipeline] sh [sandbox%2Fpipeline-test-new1] Running shell script + ls -l total 8 -rw-r--r-- 1 jenkins jenkins 10 Jun 17 16:07 someFile [Pipeline] } Deleting 1 temporary files [Pipeline] // wrap [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS