[解決済み] JenkinsでExecute Shellがビルドを失敗とマークする方法/タイミングは?
質問
この答えを探しているときに見つけた怖い話・・・。
OK、私は.shスクリプトを持っていますが、それはほとんどすべてのJenkinsが行うことになっていることを行います。
- SVNからソースをチェックアウトする
- プロジェクトのビルド
- プロジェクトをデプロイする
- 後始末
そこでJenkinsでは、Execute Shellコマンドでスクリプトを実行して、プロジェクトを「ビルド」するだけにしました。 スクリプトが実行され(ソースがダウンロードされ、プロジェクトがビルド/デプロイされ)、ビルドが失敗とマークされます。 ビルドステップ 'Execute shell' はビルドを失敗とマークしました。 スクリプトが正常に実行されたとしてもです。でスクリプトを閉じてみました。
- exit 0 (やはり失敗と表示される)
- exit 1 (予想通り、失敗とマークされる)
- exitコマンドを全く使用しない(失敗としてマークされる)
Execute Shellは、いつ、どのように、そしてなぜ、私のビルドを失敗とマークするのですか?
解決方法は?
まず最初に、下のグレーの部分にマウスカーソルを合わせてください。答えの一部ではありませんが、絶対に言っておかなければならないことです。
<ブロッククオートチェックアウト、ビルド、デプロイをすべてシェルスクリプトで行うのであれば、なぜJenkinsを使っているのでしょうか?あなたは、Jenkinsのすべての機能を放棄しているのです。 cronやSVNのポストコミットフックでスクリプトを直接呼び出した方がいいかもしれません。 . JenkinsがSVNチェックアウトを行うこと自体が重要なのです。これによって、変更があったときだけビルドを起動することができます(タイマーでも手動でもかまいません)。ビルドの間の変更点を追跡することができます。変更点が表示されるので、どのビルドがどの変更点に対するものかを確認することができます。変更がビルドの成功や失敗の原因となった場合、コミッターにメールを送ります(これもお好みで設定できます)。失敗したビルドを修正したときに、コミッターにメールを送ります。などなど。Jenkinsが成果物をアーカイブすることで、ビルドごとにJenkinsから直接成果物を利用できるようになります。SVNチェックアウトほど重要ではありませんが、これもまたJenkinsを構成する不可欠な要素です。デプロイも同じです。単一の環境でない限り、デプロイは通常、複数の環境で行われます。Jenkinsは、プロモーションを使うことで、特定のビルド(特定のSVN変更のセットを含む)がどの環境にデプロイされたかを追跡することができます。あなたはこのすべてを放棄しているのです。Jenkinsを使わなければならないと言われているようですが、本当は使いたくありませんし、上司の気を引くために、「はい、Jenkinsを使いました」というチェックマークを入れるためだけにやっているようにしか聞こえませんね。
簡単に言うと、終了コードが
最後
のコマンドは、ジェンキンの
シェルを実行する
の成否を決定するのは、ビルドステップです。
ビルドステップ
.
0
- を成功させる。
anything else
- 失敗
注意!これは成功/失敗を判断しているのは
ビルドステップ
全体ではなく
ジョブ実行
. ジョブ実行全体の成功/失敗は、複数のビルドステップ、ビルド後のアクションやプラグインによってさらに影響される可能性があります。
あなたは
Build step 'Execute shell' marked build as failure
ということで、ここでは一つのビルドステップだけに焦点を当てます。もし、あなたの
シェルの実行
ビルドステップでは、シェルスクリプトを呼び出す行が1つしかないため、シェルスクリプトの終了コードでビルドステップの成否が決まります。もっと多くの行がある場合は
後
シェルスクリプトを実行する際に、失敗の原因となる可能性があるため、慎重に確認してください。
最後に、こちらをご覧ください。
Jenkinsのビルドスクリプトは、Googleテストの実行後に終了します。
. 質問とは直接関係ありませんが、Jenkinsが起動するのは
シェルを実行する
ビルドステップは、シェルスクリプトとして
/bin/sh -xe
は
-e
は、シェルスクリプトが
出口
のように、1コマンドだけ失敗しても、失敗と表示されます。
でも
そのコマンドに対してエラーチェックを行った場合 (エラーチェックに入る前にスクリプトが終了してしまうため)。これは、通常、失敗したコマンドのエラーメッセージを表示して(あるいは、それをnullにリダイレクトして他の方法で処理して)、処理を継続するシェルスクリプトの通常の実行とは異なっています。
これを回避するために
set +e
をシェルスクリプトの先頭に追加してください。
スクリプトはすべて実行されるとのことなので、失敗するコマンドはスクリプトの最後のほうにある可能性が高いです。最後のechoとか?あるいは、どこかにアーティファクトをコピーしていませんか?コンソールの出力をすべて見てみないと、推測でしかありませんが。
ジョブ実行のコンソール出力と、できればシェルスクリプト自体も投稿していただければ、どの行が失敗しているのか正確にお伝えできると思います。
関連
-
[解決済み] sed が正規表現で終端がない代用品でエラーになる
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] シェルで、「2>&1」はどういう意味ですか?
-
[解決済み] ディレクトリが存在しない場合のみmkdirする方法は?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Jenkinsを手動で再起動する方法は?
-
[解決済み] ファイルを grep して次の 5 行を取得するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AWS cliの変数を置換して、シークレットマネージャーのパスワードを更新する。
-
[解決済み] ファイル中のある文字列が出現する行番号を表示するには?
-
[解決済み] ファイルの行の順番を逆にするにはどうすればよいですか?
-
[解決済み】シェルスクリプトでコメントをブロック化する
-
[解決済み】sshのタイムアウトを設定する方法は?
-
[解決済み] シェルで$$はどういう意味ですか?
-
[解決済み] POSIX shで文字列が他の文字列を含んでいるかどうかを判断するにはどうすればよいですか?
-
[解決済み] シェルの実行に失敗してもJenkinsのビルドを失敗させないようにする
-
[解決済み] 別のtmuxセッションの中でtmuxセッションを開いたときに、コマンドを送信するにはどうすればよいですか?
-
[解決済み] バックグラウンドでコマンドを実行し、何も出力されないのはなぜですか?