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"
-> メッセージは冗長ですが、終了コードは一貫して保持されます。
はい、ディレクトリがあります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
そうでなければ$?
十分に新鮮ではありません。真/偽のテストも明確です。