Jenkins Workflow并行步骤和闭包

时间:2016-08-08 15:41:01

标签: jenkins jenkins-workflow jenkins-pipeline jenkins-groovy


作为工作流程的一部分,我正在尝试并行测试并行测试。所以我创建了一个地图,放了几个闭包并将其传递给并行步骤。我面临的问题与HTML报告的名称有关。执行后,我看到一些相同的“HTML报告”链接,因此我无法打开特定报告 - 所有报告都具有相同的名称。我试图让这个名字与众不同,但这些尝试都没有成功。有没有人遇到类似的事情?

def testExecutions = [:]

def testExecution = {
   node {
        //code to run tests

        publishHTML(target: [allowMissing: false, 
                             alwaysLinkToLastBuild: false, 
                             keepAll: true, reportDir: 'target/reports', 
                             reportFiles: 'index.html', 
                             reportName: "HTML Report " + it)
   }
}

for (int i = 0; i < 2; i++) {
    final k = i

    testExecutions.put("tests $k", {testExecution(k)})
}

parallel(testExecutions)

2 个答案:

答案 0 :(得分:0)

也许testExecution()函数缺少it参数?

def testExecution(it) = {
    node {
        ....
    }
}

答案 1 :(得分:0)

您的节点似乎处于错误的级别。现在这提出了一个非常有趣的问题。

我的猜测是你的工人实际上会让节点执行k或者它已经被主人评估了,这意味着从并行调用的角度来看隐式闭包论证总是等于1.(虽然我认为自己没有足够的教育和詹金斯的工作流程和groovy肯定地说)

这个版本应该适合你

def testExecutions = [:]

def testExecution = {
    println "HTML Report " + it
}

for (int i = 0; i < 2; i++) {
    final k = i

    testExecutions.put("tests $k", {node{testExecution(k)}})
}

parallel(testExecutions)