Я согласен с @dmeister, но с кодом конвейера (Jenkinsfile) я предлагаю попробовать / перехватить и затем проанализировать ошибку. Таким образом, вы можете определить, получаете ли вы только биты состояния от 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
}
}
Прошу прощения у заводных пуристов - это не мое дело, поэтому я уверен, что это можно улучшить - дайте мне знать. Существует одна известная дыра: если pylint обнаруживает только ошибки «фатального» типа (бит 0) и никаких других проблем любого рода (биты 1-4 не установлены), тогда этот код будет некорректно генерировать исключение. Но мой код помечает кучу проблем, так что это не проблема для меня. Исправление («parse error msg») может быть тривиальным для кого-то с отличными отбивками.