estoy de acuerdo con @dmeister, pero con código de canalización (Jenkinsfile) Sugiero una prueba/captura y luego analizar el error. De esta manera se puede determinar si es sólo el bit de estado de pylint (véase los documentos pylint), ya sea pylint informa de un error de uso, o si hubo una falla catastrófica:
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
}
}
Disculpas a Groovy puristas - maravilloso no es lo mío, así que estoy seguro de que esto se puede mejorar, házmelo saber. Hay un agujero conocido: si pilylint detecta solo errores de tipo "fatal" (bit 0) y no hay otros problemas de ningún tipo (los bits 1-4 no están configurados), entonces este código arrojará una excepción de forma incorrecta. Pero mi código señala toneladas de problemas, así que eso no es un problema para mí. La solución (? Parse error msg?) Podría ser trivial para alguien con groovy chops.
Maldita sea. Depuré lint.py y descubrí una llamada a sys.exit (self.linter.msgstatus) donde no se podía encontrar el msgstatus en contexto. Reemplazar esto con un 0 funcionó y ahora las compilaciones están teniendo éxito. – Gobliins