如何在jenkins中显示npm审核结果并使构建失败

如何在jenkins中显示npm审核结果并使构建失败,jenkins,npm,npm-audit,Jenkins,Npm,Npm Audit,我希望将npm命令作为ci构建的一部分运行,并以某种方式在jenkins ci构建中显示输出 如果发现严重漏洞,我希望通过返回非零退出代码使当前构建失败。我不知道有任何插件可以实现这一点,但一些手动解析可能会起作用(如果您使用的是管道) 然后,您可以使用一些正则表达式或其他字符串操作来查找临界值之后的数字。您还可以使用archiveArtifacts在构建历史记录中保存整个输出。受此启发,我通过创建一个自定义的“编译器警告解析器”实现了这一点 安装 配置自定义解析器: 管理Jenkins->配置

我希望将npm命令作为ci构建的一部分运行,并以某种方式在jenkins ci构建中显示输出


如果发现严重漏洞,我希望通过返回非零退出代码使当前构建失败。

我不知道有任何插件可以实现这一点,但一些手动解析可能会起作用(如果您使用的是管道)

然后,您可以使用一些正则表达式或其他字符串操作来查找临界值之后的数字。您还可以使用archiveArtifacts在构建历史记录中保存整个输出。

受此启发,我通过创建一个自定义的“编译器警告解析器”实现了这一点

  • 安装
  • 配置自定义解析器:
    管理Jenkins->配置系统->编译器警告部分
    名称:NPM审计分析器
    链接名称:NPM审核分析器
    趋势报告名称:检测到的漏洞
    正则表达式
    [\w+-]+\s+([\w+-]+)\s+([\w\.-@]+)\s+(>=\s)*([\w\.-@]+)\s+(.+?=http))([\w\.-@]+\s+(.*)

    映射脚本
  • 导入hudson.plugins.Warning.parser.Warning
    导入hudson.plugins.analysis.util.model.Priority
    优先级=优先级。高;
    如果(“低”==匹配器组(2)){
    优先级=优先级。低;
    }
    否则,如果(“中等”==匹配器组(2)){
    优先级=优先级。正常;
    }
    String msg=“在“+matcher.group(1)+”中发现的漏洞”(“+matcher.group(6)+”),优先级:“+matcher.group(2)+”修复:“+matcher.group(5)+”信息:“+matcher.group(5);
    返回新警告('package.json',0,'NSP Warning',matcher.group(1),msg,priority);
    
  • 配置作业
  • 添加执行shell构建步骤:
  • npm安装
    #“编译警告生成后步骤”的可分析报告
    npm audit--可解析>>npm_audit_report_parseable.txt | | true#抑制npm审核错误代码
    
  • 添加[弃用]编译器警告扫描生成后步骤:
    “扫描工作区文件”->文件模式:npm_audit_report_parseable.txt
    “扫描工作区文件”->解析器:NPM审核分析器
  • (可选)您可以配置“健康/状态阈值”;这决定了构建何时失败以及何时被标记为不稳定


    另一个解决方案:使用

  • 安装
  • 配置“依赖项检查”全局工具:
    管理Jenkins->全局工具配置->依赖项检查->添加依赖项检查
  • 配置作业
  • 添加调用依赖项检查构建步骤:
    依赖项检查安装:选择配置的全局工具
    我还配置了额外的参数--scan/non/existing/dir,以避免在安装的包相关文件(如“demo”、“docs”等)中发现漏洞。因为“依赖项检查插件”执行完整的递归文件扫描,我们不需要,因为npm扫描程序已经找到了“npm审计”结果
  • 添加发布依赖项检查结果生成后步骤:
    XML报告:**/dependency-check-Report.XML

  • 你能详细说明你的问题吗?这是个人项目还是团队合作?如果是一个团队,你最终实现了吗?我不明白你为什么希望构建失败。在成功构建之前,难道不需要所有PR作者在每个PR分支中进行相同的修复吗?
    def output = sh script: "npm audit", returnStdout: true
    def summary = output.split("\n")[-1] //get the summary from the last line
    ...