如何让CloudBuild流水线中的mypy类型检查步骤不失败?支持错误容忍或类似Pylint的阈值设置
解决CloudBuild中Mypy类型检查步骤失败的两种方案
你提到在CloudBuild流水线里添加mypy类型检查后步骤失败,想要实现要么忽略错误让步骤通过,要么设置错误阈值,这两个需求都可以解决,下面分别给出具体实现方式:
方案一:强制让Mypy步骤始终通过
如果希望不管mypy检测出多少错误,该CloudBuild步骤都标记为成功,你可以给mypy添加--exit-zero参数,这个参数会让mypy不管检查结果如何都返回0(成功)的退出码,这样CloudBuild就不会判定步骤失败了。
修改后的步骤配置如下:
id: 'type-check' name: ${_TEST_IMAGE} waitFor: ["linter"] dir: "${_PYTHON_}" entrypoint: 'mypy' args: - "--config-file=mypy.ini" - "--ignore-missing-imports" - "--exit-zero" # 新增这个参数 - "./mycode_folder"
方案二:设置错误阈值(类似Pylint的fail-under)
Mypy本身没有直接的fail-under参数,但我们可以通过自定义脚本的方式实现错误数阈值控制。具体思路是:运行mypy并捕获错误总数,然后和你设定的阈值比较,只有当错误数超过阈值时才让步骤失败。
你需要把entrypoint换成bash,然后通过脚本来处理,修改后的配置示例如下:
id: 'type-check' name: ${_TEST_IMAGE} waitFor: ["linter"] dir: "${_PYTHON_}" entrypoint: 'bash' args: - '-c' - | # 设定允许的最大错误数阈值 MAX_ERRORS=60 # 运行mypy并捕获输出,同时记录错误数 MYPY_OUTPUT=$(mypy --config-file=mypy.ini --ignore-missing-imports ./mycode_folder) echo "$MYPY_OUTPUT" # 从输出中提取错误数 ERROR_COUNT=$(echo "$MYPY_OUTPUT" | grep -oP 'Found \K\d+' | head -n1) # 如果错误数为空(没有错误),设为0 ERROR_COUNT=${ERROR_COUNT:-0} # 比较错误数和阈值 if [ "$ERROR_COUNT" -gt "$MAX_ERRORS" ]; then echo "错误数($ERROR_COUNT)超过阈值($MAX_ERRORS),步骤失败" exit 1 else echo "错误数($ERROR_COUNT)在阈值范围内,步骤通过" exit 0 fi
这个脚本会先运行mypy并打印输出,然后从输出中提取错误总数,和你设定的MAX_ERRORS比较:如果错误数超过阈值,步骤退出码为1(失败),否则退出码为0(成功)。你可以根据实际需求调整MAX_ERRORS的值。
另外需要注意:如果你的mypy输出格式有变化,可能需要调整提取错误数的grep命令,确保能正确捕获到错误数量。
内容的提问来源于stack exchange,提问作者djohon
相关产品推荐
相关产品推荐

