You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置使npm audit检测到问题依赖时GitLab CI流水线失败

GitLab CI 配置npm audit检测到风险依赖即阻断流水线实现方法

你当前使用的GitLab官方封装npm-audit分析镜像默认仅生成依赖扫描报告,不会因为检测到漏洞主动返回非0退出码,因此不会触发流水线失败。可通过以下两种方案实现需求:

方案1:使用npm audit原生退出码逻辑(推荐,支持自定义阈值)

npm audit 命令原生自带退出码规则:只要检测到符合配置阈值的安全漏洞,就会返回非0退出码,GitLab CI检测到脚本返回非0时会直接判定作业失败、阻断后续流程。该方案可灵活配置触发阻断的最低漏洞等级,参考配置如下:

dependency-scan:
  # 替换为你项目实际使用的Node版本,保证和项目开发环境版本一致
  image: node:20-alpine
  stage: security-check
  script:
    # 安装项目依赖,必须先完成依赖安装才能执行audit检测
    - npm ci
    # 执行安全检测,结果输出为JSON格式留存报告
    - npm audit --audit-level=high --json > gl-dependency-scanning-report.json
  artifacts:
    reports:
      dependency_scanning: gl-dependency-scanning-report.json
    paths:
      - gl-dependency-scanning-report.json
  • --audit-level 用于配置触发阻断的最低漏洞等级,可选值为 critical/high/moderate/low/none
  • 示例中配置为high表示检测到高危、严重漏洞时触发失败;如果需要所有等级漏洞都阻断,将参数值改为low即可

如果需要完全兼容GitLab原生依赖扫描报告格式、在安全面板展示完整数据,可额外安装官方报告转换工具处理输出内容,不影响阻断逻辑。

方案2:保留原有官方analyzer配置,新增报告校验步骤

如果不想替换原有官方分析镜像、需要完全保留原有报告的生成逻辑和格式,可以在原有脚本执行完成后,新增一步校验生成的JSON报告中是否存在漏洞条目,存在则返回非0退出码触发失败,参考配置如下:

dependency-scan:
  image: "registry.gitlab.com/gitlab-org/security-products/analyzers/npm-audit:1.4.0"
  stage: security-check
  variables:
    TOOL: npm
  script:
    # 如执行时提示jq命令不存在,放开下一行注释即可,该镜像基于Alpine制作,用apk包管理器安装jq
    # - apk add --no-cache jq
    - /analyzer run
    # 校验报告中漏洞条目数量,大于0则输出提示并返回非0退出码阻断流水线
    - |
      VULN_COUNT=$(jq '.vulnerabilities | length' gl-dependency-scanning-report.json)
      if [ "$VULN_COUNT" -gt 0 ]; then
        echo "检测到${VULN_COUNT}个存在安全风险的问题依赖,流水线阻断"
        exit 1
      fi
  artifacts:
    reports:
      dependency_scanning: gl-dependency-scanning-report.json
    paths:
      - gl-dependency-scanning-report.json

补充说明

  • 如果需要忽略特定经过评估确认无影响的漏洞,npm 8及以上版本可使用npm audit resolve命令标记忽略,被忽略的漏洞不会触发非0退出码。
  • 上述配置可配合GitLab项目设置中的安全门禁规则一起使用,在合并请求环节额外增加漏洞校验,实现多层管控。

内容的提问来源于stack exchange,提问作者HichamElk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 19:12:43