问题描述
我有一个名为 READ_LOGS 的作业,它以 serverName 作为参数并通过 ssh 进入服务器并抓取日志文件。
参数:服务器名称
构建步骤:执行shell脚本,脚本内容如下命令
ssh -f user@serverName 'cat /tmp/test.log'
我有另一个名为 START_POC 的作业,它确实提供了 6 个服务器的列表作为选择参数。在运行作业时,用户选择任意数量的服务器来获取日志。 我想在用户选择的服务器上多次运行 START_POC,它应该并行运行 x 次。
def runparallellogs = []
for (server in servers){
runparallellogs["run-${server }"] = {
buildJob = build job: 'READ_LOGS',parameters: [string(name: 'serverName',value: "${server")]
}
}
parallel runparallellogs
这种方法给了我 java.lang.IllegalArgumentException: argument type mismatch
错误
parallel (
{ build("READ_LOGS",serverName: server1) },{ build("READ_LOGS",serverName: server2) },serverName: server3) },serverName: server4) }
)
方法 3:
def testJobs = []
for (server in servers) {
def jobParams = [serverName: server]
def testJob = {
// call build
build(jobParams,"READ_LOGS")
}
println jobParams
testJobs.add(testJob)
}
parallel(testJobs)
java.lang.IllegalArgumentException: Expected named arguments but got [org.jenkinsci.plugins.workflow.cps.cpsClosure2@598ac18e,org.jenkinsci.plugins.workflow.cps.cpsClosure2@238eaf6c,org.jenkinsci.plugins.workflow.cps.cpsClosure2@200d849d,org.jenkinsci.plugins.workflow.cps.cpsClosure2@6ddfc97b]
我只想为用户选择的 x 个参数从 START_POC 作业运行 READ_LOGS 日志作业。在这种情况下,任何帮助将不胜感激。
解决方法
我假设他们在 parallel
的实现中更改了一些不接受列表而只接受命名参数的内容,这就是您收到错误的原因。
如果您使用地图而不是列表,则效果很好。例如,在您的第一种方法中,您应该将 runparallellogs 声明为 map:def runparallellogs = [:]
在第二种方法中,您还应该使用地图,例如:
parallel ([
"run-server1" : {
build(
job: "READ_LOGS",parameters: [ string(name: 'serverName',value: "server1")])
},"run-server2" : {
build(
job: "READ_LOGS",value: "server2")])
},])