GIT 클론에 대한 온전한 생성

GIT 클론에 대한 온전한 생성

5분마다 GIT 클론 상태를 실행하는 Jenkins 파이프라인을 만들고 싶습니다. GIT 복제 명령이 작동하지 않거나 실패하거나 통과하는 경우 오류/문제를 어떻게 포착합니까?

답변1

일반적인 접근 방식은

if command; then
    # Every went OK
else
    # Something failed
fi

적용 대상 git:

if git clone ...; then
    # The repo was cloned correctly
else
    # Something failed
fi

git clone첫 번째 분기는 명령이 상태 0(성공을 나타냄)으로 종료되는 경우에만 수행됩니다. 다른 모든 종료 상태는 실패로 간주되어 두 번째 분기가 수행됩니다.

답변2

존재하지 않는 파일의 경우 a다음 과 같은 cat경우 :git

]# e=$(cat a 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=1 out="cat: a: No such file or directory"

이제 명령이 생겼습니다산출, 이는 "결과" 값으로 stderr로 대체된 cat의 stdout입니다. 반환 코드는 무료로 제공됩니다 $?.

성공적으로 비교하려면 다음을 수행하십시오 cat.

]# e=$(cat atext 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=0 out=""

-> 성공 시 null로 리디렉션됩니다. 빈 오류 메시지입니다.

]# e=$(cat atext)
]# echo ret=$? out=\"$e\"
ret=0 out="First line of a"

-> 성공했으므로 "$e"는 데이터를 저장합니다.


]# e=$(cat xxx 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=1 out="cat: xxx: Is a directory"

-> 메시지는 장황하지만 종료 코드는 일관되게 유지됩니다.

예, 디렉토리가 있습니다 xxx. git clone .git xxx특정 오류를 발생시키려고 할 때 디렉토리가 만들어졌습니다.

(그래서 나는 로 바꿨다 cat)

]# e=$(cat -M 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=1 out="cat: invalid option -- 'M' Try 'cat --help' for more information."
]# 

여전히 ret=1입니다.


댓글 링크에 실종자에 대한 불만이 표시되어 있습니다.특정한자식 오류 코드. (porcelain) git 명령은 대화형 사용을 위해 설계된 반면 (bash) 셸에는 입력 및 출력에 대한 자체 개념이 있기 때문에 이것이 이중 오해라고 생각합니다.

내 예에서는 cat의 통합 오류 코드 "1"에 대해 불평하거나 메시지를 캡처하고 구문 분석하려고 시도해서는 안 됩니다.복잡한 스크립트(이것은 다음과 같다.간단한 절차). 먼저 모든 것이 준비되었는지 확인하고 필요한 경우(오류 또는 경고) 사용자에게 알려야 합니다.

어떤 종류의 오류 코드가 표시되는지 궁금합니다 git clone. git의 매뉴얼 페이지는 반환 코드에 대해 매우 조용합니다. vi 예제와 같습니다. mount"코드는 OR될 수 있다"와는 매우 다릅니다.


"안전하지 않은" 명령이 주어지면 git clone $d오류 코드와 소스 코드를 메시지에 추가할 수 있습니다. 다음은 대화형 단일 라이너입니다.

]# d='xxx'; git clone $d || echo "g. cl. failed with $?"
fatal: destination path 'xxx' already exists and is not an empty directory.
g. cl. failed with 128

스크립트로서 이것은 그렇게 명확하지 않습니다.

]# . gc.sh 
fatal: destination path 'xxx' already exists and is not an empty directory.
g. cl. failed with 128

그리고 cat gc.sh:

d='xxx'
git clone $d; ret=$?  
if (( $ret > 0 )) 
   then echo "g. cl. failed with $ret"
fi

그렇지 않으면 $?충분히 신선하지 않습니다. 참/거짓에 대한 테스트도 명확합니다.

관련 정보