我需要從管道中的文件中讀取值。我正在使用split(),它將它們放入陣列。我需要將它們放入Arraylist,所以我使用的是Arrays.asList()。時遇到的問題是我無法使用尺寸()或長度()方法,所以我不能使一個for循環如Jenkins管道 - 如何遍歷列表
for (ii = 0; ii < var.length; ii++)
或
for (ii = 0; ii < var.size; ii++)
因爲我得到的錯誤:unclassified字段java.util.Arrays $ ArrayList長度
所以我試圖用一個for每個循環,但是當我採取一些行動(如ls命令例如)在我的finally塊中,它只能迭代1次。但是,如果我只是運行命令'echo',它會按照它應該的每個元素進行迭代。任何關於如何修改我的代碼以使其在使用任何命令時都能對列表中的每個元素進行迭代的建議?
正常工作....
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(迭代針對每個元件):
[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
但是,如果我採取某些動作,如'LS -l'它只迭代1次
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(只迭代1次):
[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
謝謝你的作品。雖然我仍然好奇爲什麼上面的2nd for循環只迭代一次,有什麼想法? – mdo123
我現在正在經歷類似的事情。據我所知,這與「sh」呼叫有關。你知道這件事嗎? – pmmaga
@pmmaga沒有抱歉,我沒有想到這一點。我只是使用@ krzyk的答案,但我沒有接受@ krzyk的答案,因爲我認爲答案的一部分應該包括上面描述的行爲的解釋。具體來說,爲什麼每個循環都在finally塊中使用「echo」,但只有在執行sh命令時才迭代一次。我想也許sh cmd正在返回一個非零退出狀態,但每個循環都應該繼續爲每個元素,所以我不確定。 – mdo123