我添加了一个构建步骤来执行Python脚本 在这个脚本中,使用lint.Run(.. args)调用pylint来检查代码 该脚本可以工作,但最终,构建失败并显示唯一的错误消息:
Build step 'Execute Python script' marked build as failure
有人知道为什么会这样吗?
答案 0 :(得分:18)
你也可以简单地加一个
shell cmdline中的pylint ||退出0
。无论如何,通过检查pyllint的结果,Pylint插件将无法构建。
答案 1 :(得分:13)
即使只发现一个小的警告问题,Pylint也会有令人不快的行为来返回非零退出代码。只有当一切都很好时,才会返回0(参见手册页)。
由于通常非零代码表示错误,因此Jenkins无法构建。
我认为有两种方法可以解决这个问题:
答案 2 :(得分:3)
最近的rylint可以选择不调用sys exit
lint.Run(args, exit=False, **kwargs)
答案 3 :(得分:2)
似乎您的pylint执行退出时状态为非零(缺少脚本,错误的选项...),也许您退出脚本时引发异常或sys.exit(something_else_than_zero)
答案 4 :(得分:1)
在Pylint 1.9.3中,有一个--exit-zero
标志。
答案 5 :(得分:1)
Pylint希望所分析的代码是100%完美的。 甚至代码警告也可能导致退出状态代码为非零。 尝试按照Pylint的建议对代码进行修复,并给它打分10/10。
希望这会有所帮助。
答案 6 :(得分:0)
我同意@dmeister,但是使用管道代码(Jenkinsfile)我建议使用try / catch然后解析错误。通过这种方式,您可以确定是否只是从pylint获取状态位(请参阅Pylint文档),pylint是否报告使用错误,或者是否存在灾难性故障:
try {
sh 'pylint --output-format=parseable my_module'
} catch ( pylint_rc ) {
// pylint_rc will be of the form
// "hudson.AbortException: script returned exit code NN"
// where NN is 1-63 and represents bit field;
// bits 0-4 indicate lint-ish issues in analyzed code,
// bit 5 indicates pylint usage error
echo "pylint_rc= \'$pylint_rc\'"
String rc = "$pylint_rc"
String code = rc.split()[5]
echo "Isolated return code string value $code"
int value = code.toInteger()
// catastrophic/crash error returns a 1; else there is a pylint return code
int error_bits_code = value & 0x20
int lint_bits_code = value & 0x1f
echo "pylint error_bits_code=$error_bits_code ; lint_bits_code=$lint_bits_code"
if ( (value == 1) || (error_bits_code != 0) ) {
currentBuild.result = "FAILURE"
throw pylint_rc
}
}
向时髦的纯粹主义者道歉 - groovy不是我的事,所以我确信这可以改进 - 让我知道。有一个已知的漏洞:如果pylint仅检测到"致命"类型错误(位0)并且没有任何其他类型的问题(1-4位未设置),则此代码将错误地抛出异常。但是我的代码标记了很多问题,所以这对我来说不是问题。修复(?解析错误消息?)对于有常规印章的人来说可能是微不足道的。
答案 7 :(得分:0)
今天就参加(尽管不使用詹金斯)。
在我的情况下,这是因为Pylint如何在其退出代码https://docs.pylint.org/en/1.6.0/run.html#exit-codes
中编码致命错误警告警告重构约定使用信息我的解决方法:
#!/usr/bin/env sh
# Wraps Pylint invocation to produce shell-friendly exit codes
# Because Pylint exit codes are weird:
# https://docs.pylint.org/en/1.6.0/run.html#exit-codes
PYTHON_EXECUTABLE=python
if [ ! -z $PYTHON_ENV ]; then
PYTHON_EXECUTABLE="$PYTHON_ENV/bin/python"
fi
${PYTHON_EXECUTABLE} -m pylint $@
PYLINT_EXIT_CODE=$?
exit $(($PYLINT_EXIT_CODE % 4))
(要点:https://gist.github.com/nkashy1/ae59d06d4bf81fb72047fcd390d08903)