web-dev-qa-db-ja.com

Jenkinsはシェルの戻り値コマンドとファイルを実行します

私はJenkinsのExecute Shell関数を別のコマンドセット(newmanテストアプリケーションを呼び出す)で使用していました。テストケースの1つがnewmanで失敗した場合、私のビルドは失敗としてマークされました。

前のExecute Shell

newman run ./test/postman_collection_1.json --environment ./test/postman_environment.json --bail
newman run ./test/postman_collection_2.json --environment ./test/postman_environment.json --bail

これらのすべてのコマンドをスクリプトファイルに移動し、「実行シェル」を使用してこのスクリプトファイルを実行したため(以前の「実行シェル」で直接実行したコマンドのコピー)、ビルドが失敗としてマークされなくなりました。ニューマンテストケースの1つが失敗します。

新しいExecute Shell

chmod +x ./docs/ci_tests.sh
./docs/ci_tests.sh

ci_tests.shの内容:

#!/bin/bash
newman run ./test/postman_collection_1.json --environment ./test/postman_environment.json --bail
newman run ./test/postman_collection_2.json --environment ./test/postman_environment.json --bail

コマンド(newman)の戻り値がjenkinsをトリガーしない理由は、ファイルを介して使用しているときに失敗しますか?

1
abd

テストが失敗したときに終了するようにシェル環境を設定する必要がありますset -e

-eこのオプションがオンの場合、コマンドが失敗すると(シェルエラーの結果にリストされている理由のいずれか、または0より大きい終了ステータスを返すことによって)、シェルは、特別な組み込みビルドを実行したかのように、ただちに終了します引数なしのユーティリティでは、次の例外があります。マルチコマンドパイプラインで個々のコマンドが失敗しても、シェルは終了しません。パイプライン自体の障害のみが考慮されます。

While、if、if、またはElifの予約語、!で始まるパイプラインに続く複合リストを実行する場合、-e設定は無視されます。予約語、または最後以外のAND-ORリストのコマンド。

サブシェルコマンド以外の複合コマンドの終了ステータスが、-eが無視されている間に失敗した結果であった場合、-eはこのコマンドには適用されません。

set-オプションの設定または設定解除と位置パラメータ でbashオプションに関する詳細情報を見つけることができます。

したがって、bashスクリプトは次のようになります。

#!/bin/bash
set -e 
newman run ./test/postman_collection_1.json --environment     ./test/postman_environment.json --bail
newman run ./test/postman_collection_2.json --environment ./test/postman_environment.json --bail
1
dkokmadis