2011-09-08 6 views
7

파이썬 스크립트를 실행하는 빌드 단계를 추가했습니다.
이 스크립트에서 pylint는 코드를 검사하기 위해 lint.Run (.. args)과 함께 호출됩니다.
스크립트는 작동하지만 결국, 빌드가 유일한 오류 메시지와 함께 실패합니다pylint가있는 젠킨스가 빌드 오류를 발생합니다.

Build step 'Execute Python script' marked build as failure

누군가가 이런 일이 발생하는 이유 아이디어가있다?

답변

1

이 0이 아닌 상태 (실종 스크립트, 나쁜 옵션 ...)와 pylint 실행 종료는, 어쩌면 당신은 발생한 예외 또는 sys.exit(something_else_than_zero)

+0

젠장. lint.py를 디버깅하고 sys.exit (self.linter.msgstatus) 호출에 대해 알아 냈습니다. 여기서 msgstatus는 컨텍스트에서 찾을 수 없습니다. 이것을 0으로 바꾸면 빌드가 성공합니다. – Gobliins

11

Pylint가에 불쾌한 행동을 가지고와 스크립트를 종료하는 것이 보인다 작은 경고 문제가 발견 된 경우에만 0이 아닌 종료 코드를 반환합니다. 모든 것이 괜찮 았을 때만 0이 반환됩니다 (맨 페이지 참조).

일반적으로 0이 아닌 코드는 오류를 나타내므로 Jenkins는 빌드를 실패합니다.

  • 는 항상 0이 그런 젠킨스 때문에 pylint 실패하지 않습니다 반환 pylint 주위에 작은 스크립트를 사용

    나는이 문제를 극복하기 위해 두 가지 방법을 참조하십시오. os.system() 및 sys.exit (0)을 사용하여 pylint를 호출하는 작은 파이썬 스크립트를 사용합니다. pylint의 오류 코드를 무시하는 것으로 볼 수 있습니다.

  • 패치 파일 린트.
+0

예, 아주 좋은 생각입니다. 나는 그것을 시도 할 것이다. – Gobliins

+0

예상대로 일했습니다! – Gobliins

+0

출력을 cat으로 파이프했으며, 이제 성공적으로 빌드 된 것 같습니다. 예 : 'pylint -f html code.py | 고양이> report.html' – zyxue

15

또한 단순히

을 예를 들어, 내 리눅스 시스템에서 sys.exit() 호출이 파일 /usr/lib/pymodules/python2.6/pylint/lint.py에 넣을 수 있습니다

pylint || exit 0

(쉘 cmdline) pylint의 결과를 확인하여 Pylint 플러그인이 빌드에 실패합니다.

3

최근 rylint는 SYS 종료를 호출하지 않는 옵션이

lint.Run (인수가 종료 = 거짓, ** kwargs로)

0

내가 (Jenkinsfile를) @dmeister에 동의하지만, 파이프 라인의 코드를 내가 제안 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 
    } 
} 

사과 - 그루비 내 일이 아니기 때문에이 점을 개선 할 수 있다고 확신합니다. 저에게 알려주세요. 알려진 구멍이 하나 있습니다. pylint가 "치명적인"유형 오류 (비트 0) 만 감지하고 다른 종류의 문제 (비트 1-4는 설정되지 않음)가없는 경우이 코드는 잘못 예외를 throw합니다. 하지만 내 코드 플래그 문제의 톤, 그래서 그게 나를 위해 문제가 아니에요. 고침 (구문 분석 오류 메시지?)은 그루비 찹을 가진 사람에게는 사소 할 수 있습니다.

관련 문제