Jenkins与本地环境上的NYC报告输出不同

nzkunb0c  于 2023-04-05  发布在  Jenkins
关注(0)|答案(1)|浏览(236)

bounty已结束。回答此问题有资格获得+200声望赏金。赏金宽限期将在17小时后结束。mindparse正在寻找来自信誉良好的来源的答案

当我试图生成Jenkins管道作业的组合覆盖报告时,发生了一些奇怪的事情。
我有一个Nx驱动的Angular monorepo,并且正在生成所有库和项目的覆盖报告。
我将以下脚本放在一起运行测试,然后使用nyc进行合并和报告操作。

const { execSync } = require('child_process');
const packageJSON = require("../package.json");

const EXCLUDE_UNIT_TEST = packageJSON.buildData.excludeUnitTest;
 
const run = (commands) => {
  commands.forEach((command) => execSync(command, { stdio: 'inherit' }));
};
 
run([
  `rm -rf coverage`,
  `npx nx run-many --target=test --all --maxWorkers=4 --exclude=${EXCLUDE_UNIT_TEST} --coverage=true`,
  `npx copyfiles -f 'coverage/**/*coverage.json' coverage/project-parts`,
  `npx nyc merge coverage/project-parts coverage/nyc/combined.json`,
  `npx nyc report --reporter html-spa --reporter lcov -t coverage/nyc --report-dir coverage/combined`
]);

这对我来说在本地工作得很好,我看到一个HTML报告(包括lcov格式和html-spa报告),用于我所有的libs/项目。
但是当在Jenkins上的节点上执行相同的脚本时(我们使用EC2从插件),HTML报告是空的。

stage('Gate 2 - Test') {
    steps {
        echo "GATE 2 - Test"
        ansiColor('xterm') {
            sh 'npm run tests:all'
        }
    }
    post {
        success {
            publishHTML (target : [allowMissing: false,
                alwaysLinkToLastBuild: false,
                keepAll: false,
                reportDir: 'coverage/combined',
                reportFiles: 'index.html',
                reportName: 'Magma Code Coverage',
                reportTitles: 'Coverage Report'])
        }
    }
}

当构建作业在Jenkins上运行时,我确实看到了生成的工作区中copyfilesnyc merge命令的输出,并且这些文件不是空的,其中有大量内容详细说明了各种覆盖信息。
nyc merge生成的最终合并文件超过20 Mb。

问题似乎只是nyc report命令。
深入研究Jenkins上的构建日志,我也没有看到HTML发布步骤中的任何错误。

有没有人在CI与Local环境中使用nyc时遇到过类似的意外覆盖结果问题?
是否有任何调试/详细输出标志可以与nyc命令一起使用,以帮助解决问题?

wh6knrhe

wh6knrhe1#

我认为输出的差异是由于环境的差异,例如工具或环境变量版本的差异。
尝试--all标志到nyc report命令,以确保所有文件都包含在报告中,并使用--verbose标志获得更详细的输出。还尝试使用不同的报告程序来生成报告,或者尝试将report命令与merge命令分开运行,以查看是否有任何作用。检查生成报告的目录是否存在任何权限问题也是很好的方法。

相关问题