153

ビルド プロセスの一環として、シェルの実行ステップとして git commit を実行しています。ただし、ワークスペースに変更がない場合、Jenkins はビルドに失敗しています。これは、コミットする変更がない場合に git がエラー コードを返すためです。ビルドを中止するか、この場合は不安定としてマークしたいと思います。何か案は?

4

14 に答える 14

254

コマンドが失敗したときにそれ以上の実行を停止するには:

command || exit 0

コマンドが失敗したときに実行を続行するには:

command || true

于 2014-09-09T13:13:11.170 に答える
97

Jenkins は、デフォルトでシェル ビルド ステップを実行し/bin/sh -xeています。-x実行されたすべてのコマンドを出力することを意味します。-eスクリプト内のコマンドのいずれかが失敗した場合、失敗して終了することを意味します。

したがって、あなたのケースで起こったことは、git コマンドが 1 で終了したことだと思います。デフォルトの-eパラメーターのために、シェルは 0 以外の終了コードを取得し、残りのスクリプトを無視して、ステップを失敗としてマークします。ビルドステップのスクリプトをここに投稿していただければ、これを確認できます。

その場合は#!/bin/sh、スクリプトがオプションなしで実行されるように設定することができます。またはset +e、ビルドステップの上でまたは同様のことを実行して、この動作をオーバーライドします。


編集: もう 1 つの注意点は、シェル スクリプトの最後のコマンドが0 以外のコードを返した場合、このセットアップでもビルド ステップ全体が失敗としてマークされることです。この場合、trueコマンドを最後に置くだけでそれを回避できます。

別の関連する質問

于 2015-02-11T07:00:50.553 に答える
10

私はここにある答えを使ってこれを機能させることができました:

エラーなしでgitcommitを実行する方法は?

git diff --quiet --exit-code --cached || git commit -m 'bla'
于 2013-01-18T18:06:19.327 に答える
8

タイトルの (より一般的な) 質問について - 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

于 2013-11-20T11:05:03.727 に答える
8

Jenkins は、ステップの戻り値によってステップの成功/失敗を判断します。シェルの場合は、最後の値を返す必要があります。exit 0Windows CMD と (POSIX) Bash シェルの両方で、最後のコマンドとして使用して、戻り値を手動で設定できるはずです。

于 2013-01-18T14:55:13.840 に答える
6

Text-finder Pluginを使用できます。出力コンソールで選択した式を確認し、ビルドを としてマークすることができますUnstable

于 2013-01-18T09:11:20.327 に答える
5

複数のシェル コマンドの場合、以下を追加して失敗を無視します。

set +e commands true

ここに画像の説明を入力

于 2019-03-11T10:31:54.443 に答える
2

以下は、変更がある場合にのみコミットすることにより、 mercurialに対して機能します。そのため、コミットが失敗した場合にのみビルドが失敗します。

hg id | grep "+" || exit 0
hg commit -m "scheduled commit"
于 2013-02-05T18:18:46.690 に答える