2017-10-02 11 views
3

CAKE 0.22.0 및 TeamCity 9.x를 사용합니다.TeamCity 개요에 표시되지 않은 CAKE 작업 오류

TeamCity에서는 빌드 단계가 build.ps1 인 빌드 단계가 하나뿐입니다. 차례대로 build.cake으로 실행됩니다.

trap 
{ 
    write-output $_ 
    ##teamcity[buildStatus status='FAILURE' ] 
    exit 1 
} 

이유는 a known PowerShell bug가 (즉, -file으로 스크립트를 실행하면 종료 코드 0을 반환 말아야 때) 우회하는 것입니다

build.ps1, 나는 다음과 같은 추가했습니다.

예외가 build.ps1 내에서 발생합니다

는 인 TeamCity는 제대로 빌드 실패를 표시 오류가 build.cake 내에서 발생하는 경우

enter image description here

그러나, 인 TeamCity 잘못 모든 것이 성공적으로 실행 주장 :

enter image description here

다음은에 의해 참조되는 "성공적인"빌드에 해당하는 빌드 로그입니다. 위의 스크린 샷 : 당신이 볼 수 있듯이

enter image description here

오류는 build.cake 작업에서 발생했다. 이 오류는 build.ps1trap 절에 포착되지 않으므로 TeamCity에 빌드 실패가 통보되지 않았습니다.

나는 (절은 Information(@"Some error message\n##teamcity[buildStatus status='FAILURE']]"에 비슷한 포함)) build.cake에 내 모든 작업에 OnError 절을 추가하는 방법에 대한 생각, 그러나 이것은 중복 된 코드의 무시 무시한 양으로 이어질 것입니다.

build.cake의 작업 내에서 던져지는 오류가 build.ps1trap 절에 잡힐 수 있도록하는 간결한 방법이 있습니까?

+1

나는 생각한다 너는 틀린 나무를 짖고 있을지도 모른다. 'trap' 수정은 Powershell 스크립트가 예외를 던지는 경우에만 도움이 될 것입니다. cake를 사용할 때 PS 스크립트는 cake 실행 파일을 호출하고 Cake가 반환하는 종료 코드를 반환합니다. Cake는 작업에서 발생하는 예외를 처리합니다. 실제로 빌드 로그에'프로세스가 코드 1로 종료되었습니다 '라고 나와 있는데, PS 스크립트가 올바른 코드를 반환하고 있으며, 빌드 단계가 종료 코드를 사용하여 오류를 표시하지 않는다고합니다. TeamCity 빌드 단계를 확인해 보겠습니다. – heavyd

+0

@heavyd 답장을 보내 주셔서 감사합니다! 내 TeamCity 빌드 단계에서 매개 변수''표준 오류 출력 형식은''경고''로 설정됩니다. 이것이 TeamCity가 빌드를 성공적으로 표시하는 이유를 설명 할 수 있습니까? –

+1

죄송합니다, 원래 의견에서 오인되었습니다. 설정은 개별 빌드 단계가 아니라 빌드 구성의 "실패 조건"섹션에 있습니다. [여기에 문서보기] (https://confluence.jetbrains.com/display/TCD10/Build+Failure+Conditions). 빌드 프로세스 종료 코드가 0이 아닌지 확인하십시오. – heavyd

답변

3

Cake 자체는 빌드 단계 설정으로 TeamCity에서 빌드되며 Cake 스크립트가 빌드 실패를보고하면 빌드가 실패합니다.

러너 유형 : PowerShell을

단계 이름 : 3 : 이전의 모든 단계를 성공적으로

PowerShell을 버전을 완료하면 :

단계 실행 빌드 케이크.0

플랫폼 : 자동

판 : 데스크톱

형식 표준 에러 출력으로 : 경고

작업 디렉토리 :

스크립트 : 소스 코드

스크립트 소스 :

.\build.ps1 
exit $LASTEXITCODE 

스크립트의 실행 모드 :는 아래의 설정으로 외부 파일에서

스크린 샷이 .ps1 실행

enter image description here

+0

답장을 보내 주셔서 감사합니다! 귀하의 제안을 받아 들였고 다음에 빌드가 실패 할 때 다시보고 할 것입니다 - 실패가 올바르게 표시되면 귀하의 답변을 수락합니다. :-) –

+1

글쎄, 계속 진행하라;) – devlead

+0

안녕하세요, 불행히도, TeamCity는 실패한 빌드가 성공적이라고 주장하고 있습니다. 그러나 * stderr 출력 형식을 "warning"에서 "error"로 변경 한 후 원하는 결과를 얻을 수있었습니다. TeamCity의 문서 (https://confluence.jetbrains.com/display/TCD9/PowerShell)에 따르면 ** "빌드 러너가 오류 메시지를 기록하는 경우 빌드를 실패하려면"(빌드 실패 조건 참조) 기본값을 변경하십시오 오류 출력 선택기를 경고에서 오류로 설정. "** TeamCity의 설명서에 맞게 답변을 업데이트하면 다시 받아들입니다 :-) 감사합니다! –