MavenがNexusにデプロイ

MavenをNexusにデプロイする

1. 概要

a previous articleで、MavenプロジェクトがMaven Central(または他の大規模で公的にホストされているリポジトリ)にまだデプロイされていないサードパーティのjarをローカルにインストールする方法について説明しました。

このソリューションは、Nexusサーバー全体のインストール、実行、保守が過剰になる可能性がある小規模プロジェクトにのみ適用する必要があります。 ただし、プロジェクトが成長するにつれて、

Nexusはすぐに、サードパーティのアーティファクトをホストするための、そして開発ストリーム全体で内部アーティファクトを再利用するための唯一の真の成熟したオプションになります。

この記事では、プロジェクトto Nexus, with Mavenのアーティファクトをデプロイする方法を示します。

2. pom.xmlのNexus要件

Mavenがビルドのpackageフェーズで作成したアーティファクトをデプロイできるようにするには、distributionManagement要素%(を介して、パッケージ化されたアーティファクトがデプロイされるリポジトリ情報を定義する必要があります。 t2)s


   
      nexus-snapshots
      http://localhost:8081/nexus/content/repositories/snapshots
   

ホストされているパブリックSnapshotsリポジトリは、Nexusですぐに使用できるため、これ以上作成または構成する必要はありません。 Nexusを使用すると、ホストされているリポジトリのURLを簡単に判別できます。各リポジトリには、プロジェクトpomの<distributionManagement>の[Summary]タブに追加する正確なエントリが表示されます。

3. プラグイン

デフォルトでは、Mavenはmaven-deploy-pluginを介してデプロイメントメカニズムを処理します。これは、デフォルトのMavenライフサイクルのdeploymentフェーズにマップされます。


   maven-deploy-plugin
   2.8.1
   
      
         default-deploy
         deploy
         
            deploy
         
      
   

maven-deploy-pluginは、プロジェクトのアーティファクトをNexusにデプロイするタスクを処理するための実行可能なオプションですが、Nexusが提供するものを最大限に活用するようには構築されていません。 そのため、SonatypeはNexus固有のプラグイン(nexus-staging-maven-plugin)を構築しました。これは、Nexusが提供するより高度な機能(ステージングなどの機能)を最大限に活用するように実際に設計されています。

簡単な展開プロセスではステージング機能は必要ありませんが、Nexusとうまくやり取りするという明確な目的を持って構築されているため、このカスタムNexusプラグインを使用します。

maven-deploy-pluginを使用する唯一の理由は、将来的にNexusの代替を使用するオプション(たとえば、Artifactoryリポジトリ)を開いたままにすることです。 ただし、プロジェクトのライフサイクル全体で実際に変更される可能性のある他のコンポーネントとは異なり、Mavenリポジトリマネージャーは変更される可能性が非常に低いため、柔軟性は必要ありません。

したがって、展開フェーズで別の展開プラグインを使用する最初の手順は、既存のデフォルトマッピングを無効にすることです。


   org.apache.maven.plugins
   maven-deploy-plugin
   ${maven-deploy-plugin.version}
   
      true
   

これで、次を定義できます。


   org.sonatype.plugins
   nexus-staging-maven-plugin
   1.5.1
   
      
         default-deploy
         deploy
         
            deploy
         
      
   
   
      nexus
      http://localhost:8081/nexus/
      true
   

プラグインのdeployゴールは、Mavenビルドのdeployフェーズにマップされます。

また、前述のように、-SNAPSHOTアーティファクトをNexusに単純に展開する場合、ステージング機能は必要ないため、<skipStaging>要素を介して完全に無効になっていることにも注意してください。

デフォルトでは、展開の目標にはステージングワークフローが含まれます。これはリリースビルドに推奨されます。

4. グローバルsettings.xml

Nexusへの展開はsecured operation –であり、deploymentユーザーは、この目的のために、Nexusインスタンスにすぐに存在します。

このdeploymentユーザーの資格情報を使用してMavenを構成し、Nexusと正しく対話できるようにすることは、プロジェクトのpom.xmlでは実行できません。 これは、pomの構文では許可されていないためです。もちろん、pomは公開アーティファクトである可能性があるため、資格情報を保持するのには適していません。

サーバーの資格情報は、グローバルMavensetting.xmlで定義する必要があります。


   
      nexus-snapshots
      deployment
      the_pass_for_the_deployment_user
   

サーバーは、生およびプレーンテキストの資格情報の代わりにキーベースのセキュリティを使用するように構成することもできます。

5. 展開プロセス

展開プロセスの実行は簡単なタスクです。

mvn clean deploy -Dmaven.test.skip=true

このジョブはプロジェクトのdeployment pipelineからの最後のジョブである必要があるため、展開ジョブのコンテキストではテストをスキップしても問題ありません。

このような展開パイプラインの一般的な例は、一連のJenkinsジョブです。各ジョブは、正常に完了した場合にのみ次のジョブをトリガーします。 そのため、プロジェクトからすべてのテストスイートを実行するのは、パイプラインの前のジョブの責任です。展開ジョブが実行されるまでに、すべてのテストが既に合格しているはずです。

単一のコマンドを実行した場合、deploymentフェーズが実行される前に、テストをアクティブにして実行することができます。

mvn clean deploy

6. 結論

これは、MavenアーティファクトをNexusにデプロイするためのシンプルでありながら非常に効果的なソリューションです。

また、多少の意見もあります。デフォルトのmaven-deploy-pluginの代わりにnexus-staging-maven-pluginが使用されます。ステージング機能が無効になっているなど、ソリューションをシンプルかつ実用的にするのはこれらの選択です。

完全なステージング機能をアクティブ化する可能性は、今後の記事の主題になる可能性があります。

最後に、次の記事でリリースプロセスについて説明します。