GitLab CI集成flake8执行时任务返回exit code 1问题求助
问题原因
flake8的默认行为是只要检测到任何代码规范违反项,就会返回非0的退出码,而GitLab CI的任务逻辑是只要script段中的任意命令返回非0值,就会判定任务执行失败,所以你看到的exit code1是flake8检测到问题后的正常返回,不属于CI配置的语法错误。
可选解决方案
方案1(最推荐):修复代码中被检测到的规范问题
根据日志输出的报错信息,直接修改对应代码即可:
- 给
./framework/tests/test_5_helper.py文件末尾补充一个空行,解决W292报错 - 删除
./framework/tests/test_1_start.py中未使用的pprint.pprint导入语句,解决F401报错
修复完成后重新执行CI任务即可正常通过。
方案2:调整flake8执行参数,允许检测到问题时任务仍标记成功
如果暂时不需要强制拦截规范问题,仅需要做规范检测留痕,可以修改CI配置中script段的flake8命令,添加--exit-zero参数:
script: - flake8 --max-line-length=120 --ignore=W605,W504 --exit-zero --tee --output-file=$FOLDER_NAME/$LOG_NAME $CHECKING_FOLDER
添加该参数后,无论flake8检测到多少问题,都会返回0退出码,CI任务会正常执行完成,且lint日志仍会正常生成保存到制品中。
方案3:将已确认不需要检测的规则加入忽略列表
如果明确不需要遵守W292、F401对应的规则,可以直接把这两个错误码加到ignore参数中,flake8就不会检测对应问题,自然不会返回非0退出码:
script: - flake8 --max-line-length=120 --ignore=W605,W504,W292,F401 --tee --output-file=$FOLDER_NAME/$LOG_NAME $CHECKING_FOLDER
方案4:手动忽略flake8的返回值
也可以在命令末尾加|| true,强制让该条命令的返回值为0,CI任务不会判定失败:
script: - flake8 --max-line-length=120 --ignore=W605,W504 --tee --output-file=$FOLDER_NAME/$LOG_NAME $CHECKING_FOLDER || true
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

