web-dev-qa-db-ja.com

異なる設定で複数のリポジトリにMavenアーティファクトをデプロイする

Jenkinsで構築されたCIであるJavaプロジェクトが多数あります。これらは、独自のNexusサーバーに正常にデプロイされます。問題は、これらのライブラリをサードパーティに提供する必要があることです。ソースコード。したがって、プロジェクトごとに、Nexusには次のものがあります。

  • 開発者用のリリースリポジトリ(デプロイされたソースコードを含む)
  • 開発者向けのスナップショットリポジトリ(デプロイされたソースコードを含む)
  • サードパーティリリースリポジトリ(JAR + POMのみ)
  • (そして持っているとよいでしょう):サードパーティのナイトリービルド用のサードパーティのスナップショットリポジトリ(JAR + POMのみ)

問題は、これは通常、ジェンキンス/ネクサスの世界でどのように処理されるのかということです。 CIビルドとリリース(アーティファクトのデプロイ)プロセスを「自動的に」処理する単一のジョブをJenkinsに配置したいと思います。現在、「メインルートpom.xml」(すべてのプロジェクトに含まれています)で複数の<distributionManagement>プロファイルを使用しています。

[...]
<profiles>
    <profile>
        <id>default</id>
        <distributionManagement>
            <repository>
                <id>releases</id>
                <name>Release</name>
                <url>http://path/to/nexus/content/repositories/releases/</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshot</name>
                <url>http://path/to/nexus/content/repositories/snapshots/</url>
                <uniqueVersion>false</uniqueVersion>
            </snapshotRepository>
        </distributionManagement>
    </profile>
    <profile>
        <id>third-party</id>
        <distributionManagement>
            <repository>
                <id>releases</id>
                <name>Release</name>
                <url>http://path/to/nexus/content/repositories/third-party/</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshot</name>
                <url>http://path/to/nexus/content/repositories/third-party-snapshots/</url>
                <uniqueVersion>false</uniqueVersion>
            </snapshotRepository>
        </distributionManagement>
    </profile>
</profiles>

Mavenのドキュメントから、ターゲットリポジトリに基づいてソースが必要/不要であることは言うまでもなく、同じビルドライフサイクル中に複数のリポジトリを使用する方法はないようです。

JenkinsでMavenの「目標とオプション」を使用してジョブを作成するトリックを実行できます:clean deploy -P third-party次に、ビルド後のアクション(「デフォルト」データを使用して「アーティファクトをMavenリポジトリにデプロイする」)を追加しますが、この場合、SNAPSHOTのみがリポジトリにアクセスし、 Jenkins Mavenリリースプラグイン を介してリリースされたアーティファクトのみが1つのリポジトリにのみアクセスします。

CIジョブ階層を過度に複雑にすることなくこれを行うための実用的なアイデアはありますか?

前もって感謝します!

16
Siaynoq

これはすべてNexusで処理できます。事前設定された例「ソースを除くすべて(Maven 2)」で使用されているようなパターンを含むリポジトリターゲットを作成し、groupid、artifactid、さらにはバージョンを制限する別のパターンでそのターゲットをさらに絞り込みます。

次に、そのリポジトリターゲットを使用する特権を作成し、それぞれのアクセス権を付与するユーザーまたはロールに割り当てます。

複数の展開などを行う必要はありません。

http://books.sonatype.com/nexus-book/reference/repository-targets.html を参照してください。

5
Manfred Moser

Maven Wagon Plugin を使用して、デプロイフェーズで単一のjarをリモートの場所にアップロードできます。

0
Piotr Gwiazda