6

私は、maven-release-plugin単体テストの失敗がある場合、リリースされない (別名、maven リポジトリに jar をデプロイする) の長年のユーザーです。

さまざまな理由から、maven deploy プラグインのみを使用したいのですが、.xml でテストが失敗した場合でもデプロイされるようmaven-surefire-pluginです。

その結果、ただの代わりに

mvn clean deploy

(シェル) に似た 2 つのステップを実行するように CI をセットアップする必要があります。

mvn clean test && mvn deploy -DskipTests=true

失敗を無視するように確実に設定されていないことを確認しました。理想的には、2 つの別々のプロセスを実行したくありません。

確かに、テストの失敗時の展開をデフォルトにすることはできませんか? 何か不足していますか?

EDIT Jenkinsの問題のようです..再現できません

Jenkinsがテストの失敗時にmavenビルドを強制的に続行する理由または方法はわかりませんが(これはレポート用であると想定しています)、続行するために渡されるオプションは表示されません。ジェンキンスが「モジュールが変更され、依存関係グラフを再計算しています」と言ったときにのみ発生するようです。

4

1 に答える 1

11

Jenkins の既知の問題 (好みによっては機能) に遭遇しています。Maven ビルド (したがって、Maven Jenkins ジョブ テンプレートから作成されたもの)-Dmaven.test.failure.ignore=trueでは、主にステータスを設定するため、関連する Maven ビルドに常にデフォルトで渡されます。テストが失敗した場合のビルドではUNSTABLEありません。FAILED

この動作は、別のスタック オーバーフロー スレッドで既に追跡されており、いくつかの参照についてはこちらこちらを参照してください。また、Jenkins JIRA プラットフォームでのオープン チケット(詳細な説明を提供) でもありますが、しばらくの間、おそらく修正されていません (または、少なくともジョブ構成 UI で明確化されています)。

ただし、フリースタイルの Jenkins ジョブ テンプレートから Maven ビルドを作成する場合、つまり、Maven 用に事前構成されていないテンプレートを使用するmaven.test.failure場合、デフォルトではプロパティが渡されないため、この動作は提供されません。

実際のガイドラインは、テストが失敗した場合にアーティファクトをデプロイしないことです (これはmaven-surefire-pluginbtw のデフォルトの動作です)。これにはさまざまな方法で取り組むことができます。

  • フリースタイルの Jenkins ジョブ テンプレートを使用することで、Maven ビルドの実行を完全に制御できます。
  • Maven Jenkins ジョブを保持し-Dmaven.test.failure.ignore=false、最初のmvn clean deployコマンドの一部としてオプションを明示的に渡します
  • ジョブをいくつかのビルド ステップに分割し、前のビルド ステップが厳密に成功した場合 (および成功/不安定でない場合) にのみ、次のステップを実行します。最初のステップはクラシックmvn clean installで、次のステップは Maven (次を参照) または Jenkins プラグイン (このタスクを適切に処理する Artifactory/Nexus Jenkins プラグインがあり、資格情報とリポジトリの管理が容易になるという直接的な利点があります) を介してデプロイします。スナップショット/リリースの場合、CI 側のガバナンス/セキュリティが向上し、pom.xmlファイルまたはすべての開発者の Maven 設定からノイズが除去されます)。

デプロイのみを行う追加の Maven ステップに関して、上記のコメントのいくつかの点にも対処するためのいくつかの考慮事項:

との間には関連する違いがあります。前者は Maven フェーズを呼び出しているため、各フェーズをカスケードします。後者は代わりに、パフォーマンスの明らかな直接的な利点 (ビルド全体ではなく、1 つの迅速なアクションを実行するだけです) と懸念 (この段階で実際に必要なものを実行するだけです)のゴール、のゴールを呼び出すだけです。 .mvn deploymvn deploy:deployvalidatedeploycompiletestpackagedeploymaven-deploy-plugin

はい、テストをスキップできますmaven-jar-plugin。たとえば、Maven によって提供されるデフォルトの最適化など、アプリケーションを再度パッケージ化することはありません。
ただし、deploy:deployMaven ビルド コンテキストの情報が欠落しているため機能しtargetません。フォルダーを確認するだけでは、展開する対象を特定するのに十分ではありません。Maven は、展開する現在のビルドにアタッチされているアーティファクトを知る必要があります。このjar:jar場合、何も再パッケージ化するのではなく、単にパッケージ化されるべきものを検出し、それをアーティファクトとしてビルド コンテキストにアタッチしてmaven-deploy-plugin満足させるだけです。このメカニズムは、こちらでも説明されています。コメントで以前に指摘したように、スタックオーバーフローの回答。

于 2016-07-20T22:21:28.163 に答える