Вы можете получить тот же результат, используя шаг readFile
. Он читает данный файл из вашей рабочей области и возвращает содержимое файла в виде строки. Затем вы можете использовать метод String.eachLine(closure)
для итерации каждой строки и добавления ее в список, который вы ожидаете. Однако помните одну вещь: если вы хотите использовать метод String.eachLine()
, вам нужно сделать это в режиме @NonCPS
. В противном случае, в лучшем случае вы получите, возможно, один элемент из итерации.
Взгляните на следующий пример:
pipeline {
agent any
stages {
stage("Read test.txt file") {
steps {
script {
final String content = readFile(file: "test.txt")
final List myKeys = extractLines(content)
echo "myKeys = ${myKeys}"
}
}
}
}
}
@NonCPS
List extractLines(final String content) {
List myKeys = []
content.eachLine { line ->
myKeys << line
}
return myKeys
}
В этом примере мы используем простой файл test.text
сследующее содержимое:
$ cat test.txt
123
qwe
asd
zxc
Запуск этого примерного конвейера приводит к следующему выводу:
Running on Jenkins in /home/wololock/.jenkins/workspace/jobA
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Read test.txt file)
[Pipeline] script
[Pipeline] {
[Pipeline] readFile
[Pipeline] echo
myKeys = [123, qwe, asd, zxc]
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Вы можете использовать аналогичный подход для извлечения ключей и значений из двух разных файлов, например
def myKeys = extractLines(readFile(file:"/tmp/A.txt"))
def myValues = extractLines(readFile(file:"/tmp/B.txt"))