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の分岐が実行される。

答え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"

-> メッセージは冗長ですが、終了コードは一貫して保持されます。

はい、ディレクトリがありますxxxgit 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

そうでなければ$?十分に新鮮ではありません。真/偽のテストも明確です。

関連情報