[linux] 쉘 실행에 실패하면 jenkins 빌드에 실패하지 마십시오.

내 빌드 프로세스의 일부로 git commit을 실행 쉘 단계로 실행 중입니다. 그러나 작업 공간에 변경 사항이 없으면 Jenkins가 빌드에 실패합니다. 커밋 할 변경 사항이 없으면 git이 오류 코드를 반환하기 때문입니다. 빌드를 중단 하거나이 경우 불안정한 것으로 표시하고 싶습니다. 어떤 아이디어?



답변

명령 이 실패 할 때 추가 실행을 중지하려면

command || exit 0

명령 이 실패 할 때 실행을 계속하려면

command || true


답변

Jenkins는 다음을 사용하여 쉘 빌드 단계를 실행합니다. /bin/sh -xe 기본적으로 합니다. -x실행 된 모든 명령을 인쇄하는 것을 의미합니다. -e스크립트의 명령 중 하나라도 실패하면 실패로 종료하는 것을 의미합니다.

그래서 귀하의 경우에 일어난 일은 git command exit with 1, 그리고 기본값으로 인해 -e 매개 변수 쉘은 0이 아닌 종료 코드를 선택하고 나머지 스크립트를 무시하고 단계를 실패로 표시합니다. 빌드 단계 스크립트를 여기에 게시 할 수 있으면이를 확인할 수 있습니다.

이 경우 넣어보십시오 #!/bin/sh 옵션없이 스크립트가 실행되도록 . 또는 set +e빌드 단계에서이 동작을 무시하기 위해 또는 비슷한 작업을 수행하십시오 .


편집 : 주목해야 할 또 다른 사항은 쉘 스크립트 의 마지막 명령 이 0이 아닌 코드를 반환 하면이 설정을 사용하더라도 전체 빌드 단계가 여전히 실패로 표시됩니다. 이 경우 간단하게echo 명령을 피하기 위해 명령을 끝에 .

다른 관련 질문


답변

git을 푸시 할 것이 없으면 종료 상태 1을 리턴합니다. 쉘 빌드 단계 실행이 각각 실패로 표시됩니다. OR 문을 사용할 수 있습니다 || (더블 파이프).

git commit -m 'some messasge' || echo 'Commit failed. There is probably nothing to commit.'

즉, 첫 번째 실패 (반환 종료 상태> 0) 인 경우 두 번째 인수를 실행하십시오. 두 번째 명령은 항상 0을 반환합니다. 푸시 할 항목이 없으면 (종료 상태 1-> 두 번째 명령 실행) echo는 0을 반환하고 빌드 단계를 계속합니다.

빌드를 불안정한 것으로 표시하려면 빌드 후 단계 Jenkins Text Finder를 사용할 수 있습니다. 콘솔 출력, 패턴 일치 (에코) 및 빌드를 불안정한 것으로 표시 할 수 있습니다.


답변

Jenkins에게 실패하지 않도록 말하는 또 다른 부드러운 방법이 있습니다. 빌드 단계에서 커밋을 격리하고 셸이 실패하지 않도록 설정할 수 있습니다.

set +e
git commit -m "Bla."
set -e


답변

Jenkins는 단계의 리턴 값으로 단계의 성공 / 실패를 판별합니다. 쉘의 경우 마지막 값의 리턴이어야합니다. Windows CMD 및 (POSIX) Bash 셸 모두 exit 0마지막 명령 으로 사용하여 반환 값을 수동으로 설정할 수 있어야합니다 .


답변

여기에있는 답변을 사용 하여이 작업을 수행 할 수있었습니다.

오류없이 아무것도 커밋하는 방법은 무엇입니까?

git diff --quiet --exit-code --cached || git commit -m 'bla'


답변

Jenkins가 실패하는 것을 방지하기 위해 제목에있는 (일반적인) 질문에 종료 코드 1이 표시되지 않도록 할 수 있습니다. ping의 예 :

bash -c "ping 1.2.3.9999 -c 1; exit 0"

이제 예를 들어 ping 출력을 얻을 수 있습니다.

output=`bash -c "ping 1.2.3.9999 -c 1; exit 0"`

물론을 ping ...포함하여 모든 명령을 사용할 수 있습니다 git commit.