1

ユニットテストの失敗があった場合、私はmaven-release-pluginの長いユーザーです(mavenリポジトリにjarをデプロイすることはありません)。テスト失敗時にmavenデプロイメントプラグインをデプロイしないようにする

さまざまな理由から、mavenデプロイメントプラグインのみを使用したいと考えていますが、maven-surefire-pluginにテスト失敗があっても展開されているように見えます。

結果の代わりに、私はセットアップ(シェル)に2段階のanalagousを行うには、私のCIなければならないだけで

mvn clean deploy 

:私は確実なの障害を無視するように設定されていないことを確認作った

mvn clean test && mvn deploy -DskipTests=true 

を。理想的には、私は2つの別々のプロセスを実行したくありません。

確かにテスト失敗時のデプロイメントはデフォルトにできませんか?何か不足していますか?ジェンキンスは、テストの失敗を継続するためにMavenのビルドを強制的にどのように(私はこれは報告のためであると仮定)なぜか

EDITは、私がわからない

再現することはできません。..ジェンキンスの問題のように見えますそれが継続するために渡されるオプションのいずれも表示していません。これは、Jenkinsが「Modules changed、dependency graphを再計算する」と述べたときにのみ発生するようです。

+0

CIサーバーとは何ですか?ジェンキンス?テストの失敗が無視されていることをどうやって確認しましたか?また、2番目のステップでは 'deploy'フェーズを起動する必要はありません。説明されている[ここ](http://stackoverflow.com/a/38148135/5606016)のように 'mvn jar:jar deploy:deploy'(プロジェクトがjarだったとします)。さらに、インラインの '&&'コマンドではなく、追加のCIジョブステップでなければなりません。 –

+0

デプロイメントはテストフェーズが失敗した場合には動作しません。設定に何か問題があります。 –

+0

はい、ジェンキンスです。追加のCIジョブステップです(したがって、シェルコマンドに類似しています)。そして 'mvn deploy:deploy'は' mvn deploy'と同じです。私は 'mvn jar:jar deploy:deploy'がどのように優れているか分かりません。そして、私はテスト失敗が無視されることを望んでいません。私は有効なポンを確認した。テスト失敗時にビルドを強制終了する確かなプラグインの方法はありません。 –

答えて

4

ジェンキンスの既知の問題(または味に応じて機能)が発生しました。これは、Mavenビルド(Maven Jenkinsジョブテンプレートから作成)では、デフォルトで常に-Dmaven.test.failure.ignore=trueをMavenビルドに渡します。テストの失敗の場合には、UNSTABLEのビルドステータスをFAILEDに設定しません。

この動作はすでに、さまざまなスタックオーバーフローのスレッドでいくつかの参照用herehereを留めてきた、そしてそれはものの、すでにしばらく以来、ジェンキンスJIRAプラットフォーム上で(詳細な説明を提供する)もopen ticketで、おそらくではないでしょう固定されている(または少なくともジョブ設定UIで明確になっている)。

フリースタイルのJenkinsジョブテンプレートからMavenビルドを作成するとき、つまりMaven向けに事前に設定されていないテンプレートを使用しているため、デフォルトではmaven.test.failureプロパティは渡されません。

ガイドラインは確かにあなたはさまざまな方法で取り組むことができます(ところでmaven-surefire-pluginのデフォルトの動作です)テストの失敗の場合にアーティファクトを展開しないことです:フリースタイル・ジェンキンスのジョブテンプレートを使用して

  • といくつかの素晴らしい事前設定をあきらめることは
  • Mavenのジェンキンスの仕事を維持し、明示的にいくつかのビルド手順で初期mvn clean deployコマンド
  • 分割ジョブの一部として-Dmaven.test.failure.ignore=falseオプションを渡すものの、したがって、Mavenの構築、実行上の完全な制御を取ります〜前回の実行が厳密に成功した場合(成功/不安定ではない場合)にのみ、次の実行を実行します。最初のステップは古典的なmvn clean installで、Maven(次を参照)またはJenkinsプラグイン(このタスクをうまく処理するArtifactory/Nexus Jenkinsプラグインがあり、より簡単な資格とリポジトリの直接的な利点がありますスナップショット/リリースの管理、したがってCI側のガバナンス/セキュリティの強化、pom.xmlファイルまたはすべての開発者の設定からのノイズ除去)。前者はMavenの位相を起動さmvn deploymvn deploy:deployとの間の関連differenceがある

    :のみ、上記のコメントでいくつかの点に対処するために、いくつかの考察を展開であろう追加のMavenのステップに関して

それゆえ、validateからdeploy(したがって、compiletest、、package)までのカスケードeach phaseと、特定のフェーズのpomファイルで設定されたすべての潜在的なプラグインの実行。後者は代わりに、maven-deploy-pluginの目標deployの目標を呼び出すだけで、パフォーマンスの明白な直接的な利点を持っています(それはただ一つの素早い行動であり、全体のビルドではありません)。そして心配です。ステージ)。

はい、テストをスキップすることができます。maven-jar-pluginは、Mavenで提供されるデフォルトの最適化など、アプリケーションを再度パッケージ化しませんが、依然としてはるかに遅く、あまり正確ではありません。
しかし、targetフォルダでは、展開するものを特定するのに十分ではないと考えられるため、Mavenは展開する現在のビルドにどのアーティファクトがアタッチされているかを知る必要があります。追加のjar:jarは、パッケージ化されるはずのものを単に検出してビルドコンテキストにアーチファクトとしてアタッチし、maven-deploy-pluginを満足させるだけで何かを再パッケージするのではなく、この場合レスキューになります。このメカニズムは、以前にコメントで指摘されているように、this Stack Overflowの答えでも説明されています。

関連する問題