まず最初に、下の灰色の領域の上にマウスを置きます。答えの一部ではありませんが、絶対に言わなければなりません:
「チェックアウト、ビルド、デプロイ」をすべて単独で実行するシェルスクリプトがある場合、なぜJenkinsを使用しているのですか?あなたはそれが何であるかを作るジェンキンスのすべての機能を先取りしています。スクリプトを直接呼び出すcronまたはSVN post-commitフックを使用することもできます。SVNチェックアウト自体を実行するJenkinsは重要です。これにより、変更があった場合にのみ(または、必要に応じて、タイマー、または手動で)ビルドをトリガーできます。ビルド間の変更を追跡します。これらの変更が表示されるため、どのビルドがどの変更セットであったかを確認できます。変更がビルドの成功または失敗を引き起こしたときにコミッターにメールを送信します(ここでも、好みに応じて構成されています)。修正により失敗したビルドが修正されると、コミッターにメールが送信されます。そしてますます。Jenkinsがアーティファクトをアーカイブすると、Jenkinsから直接ビルドごとにアーティファクトを利用できるようになります。これはSVNチェックアウトほど重要ではありませんが、これもJenkinsを構成する重要な要素です。デプロイと同じです。単一の環境がない限り、展開は通常複数の環境で行われます。Jenkinsは、プロモーションを使用して、特定のビルド(SVNの変更の特定のセットを含む)がデプロイされた環境を追跡できます。あなたはこのすべてを先取りしています。「ジェンキンスを使わなければならない」と言われているようですが、本当に使いたくはありません。上司を背負わせて「はい、ジェンキンスを使用しました」というチェックマークを付けるだけです。
短い答えは、JenkinのExecute Shellビルドステップの最後のコマンドの終了コードは、ビルドステップの成功/失敗を決定するものです。-成功、-失敗。これは、ジョブ実行全体ではなく、ビルドステップの成功/失敗を決定することに注意してください。ジョブ実行全体の成功/失敗は、複数のビルドステップ、およびビルド後のアクションとプラグインによってさらに影響を受ける可能性があります。0
anything else
既に説明したとおりBuild step 'Execute shell' marked build as failure
、1つのビルドステップにのみ焦点を当てます。実行シェルビルドステップにシェルスクリプトを呼び出す1行しかない場合、シェルスクリプトの終了コードがビルドステップの成功/失敗を決定します。シェルスクリプトの実行後にさらに行がある場合は、それらが失敗の原因となっている可能性があるため、慎重に確認してください。
最後に、こちらをお読みください。Googleテストの実行後にJenkinsビルドスクリプトが終了します。それはあなたの質問とは直接関係ありませんが、JenkinsがExecute Shellビルドステップを起動するシェルスクリプトとして、/bin/sh -xe
-e
シェルスクリプトをすることを意味して終了、ちょうど1コマンドが失敗しても、失敗しても、あなたはそのコマンドのエラーチェックを行う場合には、(スクリプトが終了するので、それはあなたのエラーチェックに到達する前に)。これは通常、失敗したコマンドのエラーメッセージを出力する(またはそれをnullにリダイレクトして他の方法で処理する)シェルスクリプトの通常の実行とは逆であり、続行します。
これを回避するにset +e
は、シェルスクリプトの先頭に追加します。
スクリプトは想定されたすべてのことを行うと言っているので、失敗したコマンドがスクリプトの最後のどこかにある可能性があります。たぶん最後のエコー?またはどこかのアーティファクトのコピー?完全なコンソール出力を表示せずに、私たちは推測しています。
ジョブ実行のコンソール出力と、できればシェルスクリプト自体も投稿してください。そうすれば、どの行が失敗しているのかを正確に知ることができます。