如何使用不同的参数值运行 jenkins 工作parralley?

问题描述

我有一个名为 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 错误

方法 2:(ref)

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")])
    },])