Jenkins矩阵构建完成后如何聚合所有并行任务的结果文件?
Jenkins矩阵构建结果汇总解决方案
方案1:使用原生stash/unstash(无需额外插件)
这是最简便的实现方式,利用Jenkins内置的文件暂存能力跨代理传递文件:
修改后的完整Pipeline代码
pipeline { agent none stages { stage('TestEm') { matrix { agent any axes { axis { name 'i' values '1','2','3','4' } } stages { stage('Test') { steps { echo "Do Test for $i" sh """ sleep 10 echo Test for $i > ${i}.txt """ // 新增:暂存当前子任务的结果文件,stash名用i区分避免冲突 stash name: "test-result-${i}", includes: "${i}.txt" } } } } } stage("Aggregate results") { agent any steps { // 循环拉取所有矩阵子任务暂存的结果文件 script { for (def i = 1; i <= 4; i++) { unstash "test-result-${i}" } } // 验证结果的示例命令,可自行删除 sh 'ls *.txt' } } } }
逻辑说明
- 每个矩阵子任务执行完测试生成结果文件后,通过
stash命令将文件暂存到Jenkins控制器,暂存名称唯一绑定当前子任务的axis变量,不会出现重名冲突 - 汇总阶段通过循环调用
unstash,即可将所有子任务的结果文件全部拉取到当前代理的工作区
方案2:使用归档+Copy Artifact插件(适合需长期留存产物的场景)
如果需要把测试结果长期存档留存,可提前安装「Copy Artifact Plugin」插件,用归档能力实现:
核心修改点
- 矩阵Test阶段生成文件后新增归档步骤:
archiveArtifacts artifacts: "${i}.txt", fingerprint: true, allowEmptyArchive: false
- 汇总阶段拉取所有归档文件到当前工作区:
script { for (def i = 1; i <= 4; i++) { copyArtifacts projectName: env.JOB_NAME, buildNumber: env.BUILD_NUMBER, filter: "${i}.txt", target: './' } }
内容的提问来源于stack exchange,提问作者Andrey Regentov
相关产品推荐
相关产品推荐

