먼저 아래의 회색 영역 위로 마우스를 가져갑니다. 대답의 일부는 아니지만 절대적으로 말해야합니다.
자체적으로 "체크 아웃, 빌드, 배포"를 수행하는 쉘 스크립트가있는 경우 Jenkins를 사용하는 이유는 무엇입니까? 당신은 Jenkins의 모든 기능을 앞 지르고 있습니다. cron 또는 SVN post-commit hook이 스크립트를 직접 호출하는 것이 좋습니다.. SVN 체크 아웃 자체를 수행하는 Jenkins가 중요합니다. 변경 사항이있을 때만 빌드가 트리거 될 수 있습니다 (또는 원하는 경우 타이머 또는 수동). 빌드 간의 변경 사항을 추적합니다. 이러한 변경 사항을 보여 주므로 어떤 빌드가 어떤 변경 사항 세트인지 확인할 수 있습니다. 변경으로 인해 빌드 성공 또는 실패가 발생하면 커미터에게 이메일을 보냅니다 (원하는대로 구성됨). 수정 사항이 실패한 빌드를 수정하면 커미터에게 이메일을 보냅니다. 그리고 점점 더. Jenkins가 아티팩트를 보관하면 Jenkins에서 바로 빌드별로 사용할 수 있습니다. SVN 결제만큼 중요하지는 않지만 Jenkins를 만드는 데 필수적인 부분입니다. 배포와 동일합니다. 단일 환경이 아닌 경우 일반적으로 배포는 여러 환경에서 발생합니다. Jenkins는 프로모션을 사용하여 특정 빌드 (특정 SVN 변경 집합 포함)가 배포 된 환경을 추적 할 수 있습니다. 당신은이 모든 것을 앞서고 있습니다. "젠킨스를 사용해야합니다"라는 말을 들었을 때처럼 들리지만 실제로 원하지는 않으며, 그냥 상사를 떼어 놓고 "예, 젠킨스를 사용했습니다"라는 체크 표시를하기 위해 그렇게하는 것입니다.
짧은 대답은 다음의 종료 코드 마지막 Jenkin의 명령의 쉘 실행 빌드 단계의 성공 / 실패를 결정 무엇 빌드 단계 . 0
-성공,anything else
-실패. 이것은 전체 작업 실행이 아니라 빌드 단계 의 성공 / 실패를 결정합니다 . 전체 작업 실행의 성공 / 실패는 여러 빌드 단계, 빌드 후 작업 및 플러그인의 영향을 더 많이받을 수 있습니다.
당신은 언급했습니다 Build step 'Execute shell' marked build as failure
했으므로 단일 빌드 단계에만 집중할 것입니다. 귀하의 경우 실행 쉘 빌드 단계는 쉘 스크립트를 호출 한 줄을 가지고, 다음 쉘 스크립트의 종료 코드는 빌드 단계의 성공 / 실패를 결정합니다. 더 라인이있는 경우, 이후에 그들이 실패의 원인이 될 수있는 사람이 귀하의 쉘 스크립트 실행, 조심스럽게 그들을 검토합니다.
마지막으로 여기에서 Jenkins Build Script exits after Google Test execution을 읽으십시오 . 귀하의 질문과 직접적인 관련이 없지만 Jenkins가 Execute Shell 빌드 단계를 과 같은 셸 스크립트로/bin/sh -xe
-e
즉, 쉘 스크립트 의지 종료 , 단 한 명령이 실패하더라도 실패와 도 당신이 그 명령에 대한 오류 검사를 할 경우는 (스크립트 종료 있기 때문에 그것은 당신의 오류 검사에 도달하기 전에). 이것은 일반적으로 실패한 명령에 대한 오류 메시지를 인쇄하고 (또는 null로 리디렉션하고 다른 방법으로 처리) 계속하는 쉘 스크립트의 정상적인 실행과 반대입니다.
이것을 피하려면 set +e
쉘 스크립트의 맨 위에 추가 하십시오.
스크립트가해야 할 일을 모두 수행한다고 말 했으므로 실패한 명령이 스크립트 끝 부분에있을 가능성이 있습니다. 마지막 에코일까요? 아니면 어딘가의 유물 사본? 전체 콘솔 출력을 보지 않고 우리는 추측하고 있습니다.
작업 실행의 콘솔 출력, 가급적이면 쉘 스크립트 자체도 게시하십시오. 그러면 실패한 행을 정확히 알려줄 수 있습니다.