7

「testproject」と呼ばれる私の Java/Maven プロジェクトは、私のジェンキンと nexus リポジトリに接続されています。

私の pom.xml は次のようになります。

....    
<distributionManagement>
    <!-- use the following if you're not using a snapshot version. -->
    <repository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>http://nexus:8080/nexus/content/repositories/releases</url>
    </repository>
    <!-- use the following if you ARE using a snapshot version. -->
    <snapshotRepository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>http://nexus:8080/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>
......

私のジェンキンスのセットアップでは、次のものがあります。

Build - maven3 - clean deploy

予想どおり、jenkins は成果物を Nexus にアップロードします。 以下のように、jenkins ビルドからのコンソール出力を見てください。

[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ testproject ---
[INFO] Building jar: /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ testproject ---
[INFO] Installing /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-   SNAPSHOT.jar
[INFO] Installing /var/lib/jenkins/workspace/testproject/pom.xml to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ testproject ---
Downloading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml
Downloaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml (1012 B at 28.2 KB/sec)
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar (47 KB at 748.5 KB/sec)
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom (6 KB at 149.3 KB/sec)

質問は次のとおりです。

pom.xml で指定したバージョンが

<version>0.1-SNAPSHOT</version>
  1. jenkins が testproject- 0.1-20120509.161644-74 .jar を Nexus にアップロードするのはなぜですか? 20120509.161644-74 はどこから来ているのですか?

  2. タイムスタンプ20120509.161644-74がアップロード前に jenkins によって生成された場合、その形式を構成できますか? testproject-01-${timestamp}-${reversionId}.jar のようなものが欲しい

4

3 に答える 3

9

Maven デプロイ プラグイン ページには、「デフォルトでは、アーティファクトのスナップショット バージョンがリポジトリにデプロイされると、タイムスタンプが末尾に追加される」ことが示されます。そのため、 を呼び出したときにプラグインによって作成されますmvn deploy

2)であなたが望むことが可能かどうかはわかりません。Mavenに問題が発生する可能性があると思います。

SNAPSHOT 依存関係で maven を使用する場合、タイムスタンプを使用して SNAPSHOT の最新バージョンを確認します。スナップショットの形式を変更すると、このメカニズムが失敗する可能性があります。

于 2012-05-10T12:43:23.060 に答える
2

The timestamp is added within a SNAPSHOT version since Maven 3. The same deploy plugin when executed with Maven 2 does not add any timestamp.

于 2012-12-04T13:22:17.640 に答える
1

これは、特定のバージョンを別のビルドで使用できるように、スナップショットのバージョンをロックダウンする Maven の方法です。問題はある程度解決されますが、欠点もあります。

スナップショットを撮りながら家々を巡ってきました。私は彼らが単に悪であると信じています。リポジトリにデプロイされたタイムスタンプ付きのスナップショット バージョンを特定のコード サブミッションと関連付けるのは面倒なため、ビルドの再現性は頭痛の種です。

深刻な手間を省き、ビルド/デプロイの前にビルドサーバーで mvn versions:set -DnewVersion=..${build.number} を呼び出すようにビルドサーバーを取得します。ソース コードに同じバージョンのタグを付けます。ビルドが失敗しても問題ありません。ビルドを構成してワークスペースを更新し、pom.xml ファイルの変更を無関係にすることができます。

スナップショットを使用する際のもう 1 つの典型的な Maven の「落とし穴」は、ビルド中に pom が消費する可能性のある依存関係のバージョンが正確にわからないことです。そのため、ビルドが依存関係:ツリーと依存関係:リストを呼び出し、他の mvn ビルド引数の前にあることを確認してください。 . (これは、推移的な解決中に同じアーティファクトのバージョンの不一致を特定するのに役立ちます - 私は今、私のビルドの DependencyManagement セクションに誓います)。

Maven は非常に長い道のりを歩んでいますが、「Maven Way」が常に最適なソリューションであるとは限りません。継続的デリバリーのベスト プラクティスを実行するには十分に成熟していません、落とし穴を認識していれば、効果的に作業できます。

于 2014-03-31T22:45:34.960 に答える