1


作为工作流程的一部分,我正在尝试运行一些带有并行测试的套装。所以我创建了一个地图,放了几个闭包并将其传递给并行步骤。我面临的问题与 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)
4

2 回答 2

0

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

def testExecution(it) = {
    node {
        ....
    }
}
于 2016-08-09T13:08:29.470 回答
0

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

我的猜测是,您的工作人员实际让节点执行 k 或者它已经被主节点评估时,这意味着从并行调用的角度来看,闭包隐式参数将始终等于 1。(尽管我认为自己没有受过足够的 Jenkins 工作流程和 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)
于 2016-08-10T12:38:20.560 回答