更新
我有一个简单的管道,我想从一个文件中以参数的形式接收多个选择。
@Test1,Accounts
@Test2,Services
@Test3,Accesses
并且我希望复选框中的所有“@Test1”、“@Test2”和“@Test3”都作为参数,这样我就可以只运行选定的测试。但是我不明白我做错了什么。管道
def code = """tests = getChoices()
return tests
def getChoices() {
def filecontent = readFile "/var/jenkins_home/test.txt"
def stringList = []
for (line in filecontent.readLines()) {stringList.add(line.split(",")[0].toString())}
List modifiedList = stringList.collect{'"' + it + '"'}
return modifiedList
}""".stripIndent()
properties([
parameters([
[$class : 'CascadeChoiceParameter',
choiceType : 'PT_CHECKBOX',
description : 'Select a choice',
filterLength : 1,
filterable : false,
name : 'choice1',
referencedParameters: 'role',
script : [$class : 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox : true,
script : 'return ["ERROR"]'
],
script : [
classpath: [],
sandbox : true,
script : code
]
]
]
])
])
pipeline {
agent {
docker { image 'node:latest' }
}
stages {
stage('Tags') {
steps {
getChoices()
}
}
}
}
def getChoices() {
def filecontent = readFile "/var/jenkins_home/test.txt"
def stringList = []
for (line in filecontent.readLines()) {
stringList.add(line.split(',')[0].toString())
}
List modifiedList = stringList.collect { '"' + it + '"' }
echo "$modifiedList"
return modifiedList
}
通过这种方法,我知道我可以使用多选复选框,因为我尝试将
def code = """ tests = ["Test1", "Test2", "Test3"]
return tests""".stripIndent()
我得到了我想要的输出。
但是当我运行我的管道时,我得到了构建成功,但总是在我的构建参数复选框中得到fallbackScript。有人能帮助我了解是什么导致fallbackScript总是运行吗?谢谢:)
1条答案
按热度按时间z31licg01#
如果要自动填充生成参数,则必须从函数返回参数列表。执行管道时,将填充带有参数的生成。请注意,只有在第二次执行管道时,新参数才可用。请参阅以下内容。
如果您希望在每次执行构建时都获得用户输入,则应将choice参数移到一个阶段中。请参考以下内容。
更新02
以下是如何从文件中读取并动态创建选择列表。