我正在尝试从文本文件中读取值并使用以下方法将这些值放入列表中。
def myKeys = []
new File( '/tmp/A.txt' ).eachLine { line ->
myKeys << line
}
def myValues = []
new File( '/tmp/B.txt' ).eachLine { line ->
myValues << line
}
问题是,Jenkins 不允许它在从属设备上运行,并且我不确定如何在此处使用 readFile
方法,因为它无法解决目的。我想创建一个列表,这是 readFile
无法做到的。
最佳答案
您可以使用 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"))
关于jenkins-pipeline - 使用 readFile 从文件中读取数据并将其转换为 groovy 中的列表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665154/