Jenkins流水线中忽略安全检查结果的Beta版本建议
解决Jenkins流水线中Safety扫描Beta版本修复漏洞的问题
方案1:用Safety配置文件过滤Beta修复项
Safety支持配置文件自定义忽略规则,创建一个safety.yml文件,添加正则匹配Beta版本的修复项:
ignore: - type: fixed_version pattern: ".*b\\d+"
然后在流水线命令里指定这个配置文件:
safety check -r requirements.txt --config safety.yml
这个规则会自动忽略所有修复版本带b+数字(比如2.0.0b1)的漏洞提示,不用提前知道漏洞ID。
方案2:Shell脚本过滤输出再判定结果
如果不想用配置文件,直接在Jenkins的Shell步骤里处理Safety的输出,过滤掉Beta修复的漏洞后再判断是否失败:
# 捕获safety的所有输出 SAFETY_RESULT=$(safety check -r requirements.txt 2>&1) # 过滤掉含"fixed in X.X.XbX"的行 FILTERED_RESULT=$(echo "$SAFETY_RESULT" | grep -v "fixed in.*b[0-9]\+") # 打印过滤后的结果 echo "$FILTERED_RESULT" # 检查剩余内容里是否还有实际需要修复的漏洞 if echo "$FILTERED_RESULT" | grep -q -E "^\\[(CRITICAL|HIGH|MEDIUM|LOW)\\]"; then exit 1 # 有非Beta修复的漏洞,流水线失败 else exit 0 # 只有Beta修复的漏洞,放行 fi
把这段脚本替换原来直接执行safety check的命令就行。
方案3:JSON报告+JQ精准过滤
如果需要更灵活的处理,让Safety输出JSON格式的完整报告,用JQ工具过滤掉Beta修复的漏洞:
# 生成JSON格式的漏洞报告 SAFETY_JSON=$(safety check -r requirements.txt --full-report --json) # 过滤出修复版本不是Beta的漏洞 NON_BETA_VULNS=$(echo "$SAFETY_JSON" | jq '.[] | select(.fixed_version | test(".*b[0-9]+") | not)') # 判断是否存在需要处理的漏洞 if [ "$(echo "$NON_BETA_VULNS" | jq length)" -gt 0 ]; then echo "发现需修复的漏洞:" echo "$NON_BETA_VULNS" exit 1 else echo "仅检测到Beta版本修复的漏洞,忽略" exit 0 fi
注意:Jenkins节点需要提前安装JQ工具,Debian/Ubuntu用apt-get install jq,RHEL/CentOS用yum install jq。
内容的提问来源于stack exchange,提问作者Utkarsh Singh
相关产品推荐
相关产品推荐

