ビルド プロセスの一環として、シェルの実行ステップとして git commit を実行しています。ただし、ワークスペースに変更がない場合、Jenkins はビルドに失敗しています。これは、コミットする変更がない場合に git がエラー コードを返すためです。ビルドを中止するか、この場合は不安定としてマークしたいと思います。何か案は?
14 に答える
コマンドが失敗したときにそれ以上の実行を停止するには:
command || exit 0
コマンドが失敗したときに実行を続行するには:
command || true
Jenkins は、デフォルトでシェル ビルド ステップを実行し/bin/sh -xe
ています。-x
実行されたすべてのコマンドを出力することを意味します。-e
スクリプト内のコマンドのいずれかが失敗した場合、失敗して終了することを意味します。
したがって、あなたのケースで起こったことは、git コマンドが 1 で終了したことだと思います。デフォルトの-e
パラメーターのために、シェルは 0 以外の終了コードを取得し、残りのスクリプトを無視して、ステップを失敗としてマークします。ビルドステップのスクリプトをここに投稿していただければ、これを確認できます。
その場合は#!/bin/sh
、スクリプトがオプションなしで実行されるように設定することができます。またはset +e
、ビルドステップの上でまたは同様のことを実行して、この動作をオーバーライドします。
編集: もう 1 つの注意点は、シェル スクリプトの最後のコマンドが0 以外のコードを返した場合、このセットアップでもビルド ステップ全体が失敗としてマークされることです。この場合、true
コマンドを最後に置くだけでそれを回避できます。
私はここにある答えを使ってこれを機能させることができました:
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
。
Jenkins は、ステップの戻り値によってステップの成功/失敗を判断します。シェルの場合は、最後の値を返す必要があります。exit 0
Windows CMD と (POSIX) Bash シェルの両方で、最後のコマンドとして使用して、戻り値を手動で設定できるはずです。
Text-finder Pluginを使用できます。出力コンソールで選択した式を確認し、ビルドを としてマークすることができますUnstable
。
以下は、変更がある場合にのみコミットすることにより、 mercurialに対して機能します。そのため、コミットが失敗した場合にのみビルドが失敗します。
hg id | grep "+" || exit 0
hg commit -m "scheduled commit"