Jenkins の既知の問題 (好みによっては機能) に遭遇しています。Maven ビルド (したがって、Maven Jenkins ジョブ テンプレートから作成されたもの)-Dmaven.test.failure.ignore=true
では、主にステータスを設定するため、関連する Maven ビルドに常にデフォルトで渡されます。テストが失敗した場合のビルドではUNSTABLE
ありません。FAILED
この動作は、別のスタック オーバーフロー スレッドで既に追跡されており、いくつかの参照についてはこちらとこちらを参照してください。また、Jenkins JIRA プラットフォームでのオープン チケット(詳細な説明を提供) でもありますが、しばらくの間、おそらく修正されていません (または、少なくともジョブ構成 UI で明確化されています)。
ただし、フリースタイルの Jenkins ジョブ テンプレートから Maven ビルドを作成する場合、つまり、Maven 用に事前構成されていないテンプレートを使用するmaven.test.failure
場合、デフォルトではプロパティが渡されないため、この動作は提供されません。
実際のガイドラインは、テストが失敗した場合にアーティファクトをデプロイしないことです (これはmaven-surefire-plugin
btw のデフォルトの動作です)。これにはさまざまな方法で取り組むことができます。
- フリースタイルの 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 deploy
mvn deploy:deploy
validate
deploy
compile
test
package
deploy
maven-deploy-plugin
はい、テストをスキップできますmaven-jar-plugin
。たとえば、Maven によって提供されるデフォルトの最適化など、アプリケーションを再度パッケージ化することはありません。
ただし、deploy:deploy
Maven ビルド コンテキストの情報が欠落しているため機能しtarget
ません。フォルダーを確認するだけでは、展開する対象を特定するのに十分ではありません。Maven は、展開する現在のビルドにアタッチされているアーティファクトを知る必要があります。このjar:jar
場合、何も再パッケージ化するのではなく、単にパッケージ化されるべきものを検出し、それをアーティファクトとしてビルド コンテキストにアタッチしてmaven-deploy-plugin
満足させるだけです。このメカニズムは、こちらでも説明されています。コメントで以前に指摘したように、スタックオーバーフローの回答。