使用 jenkins 工作流组合来自不同节点的 ArtifactArchiver 和 JunitResultsArchiver

Combining ArtifactArchiver and JunitResultsArchiver from different nodes using jenkins workflow

如何在并行构建过程中归档来自多个节点的内容?

我有一个并行构建 win/lin 的 jenkins 工作流作业。作业完成后,linux 结果会覆盖 windows 结果。

如何共享或收集来自每个节点的结果,以便在我的最终产品中获得两个集合?

def branches = [:]

branches["Windows Build"] = {
  node('winx64&&slave')
  {
    // Do build
    ...
    // Collect      
    step([$class: 'JUnitResultArchiver', testResults: '**/build/test-results/*.xml', fingerprint: false])
    step([$class: 'ArtifactArchiver', artifacts: '**/build/reports/**,**/build/*.log', excludes: null])      }                
  }
}

branches["LinuxBuild"] = {
  node('linx64&&slave')
  {
    // Do build
    ...
    // Collect      
    step([$class: 'JUnitResultArchiver', testResults: '**/build/test-results/*.xml', fingerprint: false])
    step([$class: 'ArtifactArchiver', artifacts: '**/build/reports/**,**/build/*.log', excludes: null])      }                
  }
  }
}

仅供参考,我想我可以在 Lin 和 Win 目录中完成工作,并将结果从 Win//... 和 Lin//... 中合并并没有覆盖,但它似乎有点笨拙。

您可以使用 stash/unstash 具有不同名称的步骤稍后检索报告,并根据需要对它们进行任何操作。

parallel firstBranch: {
    // do something
    stash includes: '**/build/reports/**,**/build/*.log', name: 'first'
}, secondBranch: {
    // do something else
    stash includes: '**/build/reports/**,**/build/*.log', name: 'second'
}

dir('dir1') {
    unstash 'first'
    // do whatever you want
}
archive 'dir1/*'

dir('dir2') {
    unstash 'second'
    // do whatever you want
}
archive 'dir2/*'