3

私はラップトップでいくつかの mavenized プロジェクトを開発しており、定期的に github にプッシュしています。私はクラウドにプライベート hudson サーバーをセットアップし、更新のために git リポジトリをポーリングしてビルドを実行しました。

残念ながら、ラップトップで「mvn release:prepare」を実行してリリース (たとえば「1.5」) を実行すると、発生する 2 つのコミット (1.5-SNAPSHOT を 1.5 に変更し、次に 1.5 を 1.6-SNAPSHOT に変更する) が一緒にプッシュされます。私のgitリポジトリ-そしてHudsonは明らかに最新のもの、つまり1.6-SNAPSHOTをビルドし、1.5リリースを完全に無視します。

それほど重要ではありませんが、プロジェクトは互いに依存しているため、pom でスナップショット以外のバージョンを宣言したいと考えています。ただし、プロジェクト B がプロジェクト A のバージョン 1.5 に依存している場合、Hudson ボックスの hudson ユーザーのローカル Maven リポジトリには見つからないため、ビルドされていないため、プロジェクト B のビルドは失敗します。

Hudson をもう少し賢くして、maven リリース バージョンが飛び交うのを確認すると、その特定のバージョンのビルドとインストールを強制してから、後のスナップショット コミットのビルドに進むことができれば素晴らしいと思います。

Hudson プラグイン、特に「M2 リリース プラグイン」を調べてきました。

http://wiki.hudson-ci.org//display/HUDSON/M2+Release+Plugin

-しかし、そのプラグインは、ハドソンに遭遇するすべてのリリースビルドを自動的にビルドおよびインストールするように強制するのではなく、より公式のMaven Repoに昇格させたいビルドを手動で選択することを目的としているようです.

更新: 私の根底にある要件のいくつかにより、ここで達成したいことを再考するようになりました-以前にそれらを表現しなかったことをお詫びします:

  • ほとんどのプロジェクトはオープンソースであるか、最終的にはオープンになる予定です。誰もがgit clone単一のプロジェクトにアクセスし、リリース タグをチェックアウトし、mvn install依存関係のための他のリポジトリを必要とせずに Maven Central を実行できるようにしたいと考えています。
  • (私のラップトップ、hudson サーバー、および他の人のチェックアウト全体で) 一貫した結果を得るために、これは明らかに、私の pom でスナップショット以外の依存関係を宣言することを優先することを示しています (少なくともリリース バージョンの場合)。
  • これにより、ハドソンにリリースアーティファクトを「mvn install」させようとする道にたどり着きました。これにより、プロジェクト A のリリースバージョン (この質問はから来ました)

さらに:

  • 私は sonotype のすばらしい oss ホスティングを使用していますが、これには GPG 署名が必要です。また、手に持てないハードウェアに GPG キーを保存したくありません :)オプションではありません。
  • 精神的には、Hudson サーバーにリリースをさせることは、私には少しなじみがありません。私は本当に CI のためにそれを望んでいます。
4

3 に答える 3

2

ここで必要なのは、実際にリリースを実行することです。Mavenの引用- リリース プラグインの使用ガイド:

リリースの実行

プラグインは、現在のリリースに関連付けられているファイル リビジョンを抽出します。Maven は、バージョン管理されたプロジェクト ソース コードをアーティファクトにコンパイル、テスト、およびパッケージ化します。最終的な成果物は、適切な Maven リポジトリにリリースされます

release:perform目標は次のとおりです。

  1. 新しいタグ名でバージョン管理されたファイル リビジョンを抽出します。
  2. プロジェクトの抽出されたインスタンスで maven ビルド ライフサイクルを実行します。
  3. バージョン管理されたアーティファクトを適切なローカルおよびリモート リポジトリにデプロイします

参考文献

于 2010-10-19T21:06:02.267 に答える
0

問題の説明を更新して、(少なくともリリースバージョンでは)pomsでスナップショット以外の依存関係を宣言することを好み、(ラップトップ、ハドソンサーバー、および他の人のチェックアウト全体で)一貫した結果を得るようにしました-私は本当に他の人が私のコードをチェックアウトして、未知のスナップショットの依存関係を探すことについて何も考えずに始められるようにしたいと思っています。

この質問につながるのは、依存関係でスナップショット以外のバージョンを使用したかったためです。ハドソンの通常の動作では、少なくとも依存関係のリリースバージョンがMaven Centralに循環するのを待たずに、「リリース」バージョンを簡単に使用できませんでした。

ただし、基本的な要件(ユーザーがコードを簡単にチェックアウトしてビルドできる)に忠実でありたい場合は、それを実行する必要があります。つまり、MavenCentralが同期するのを待ちます。

私はリリースビルドのためだけにこれを保持したいので(そうでなければ私は何もしません)、スナップショットデップを使用して幸せに開発します-実際にバージョンリリースを作成たい時点まで、その時点ですべてのDepがMavenCentralで適切に利用できるようにしたいと思います。

私は最近までこれを強制する方法を知りませんでしたが、もう少しグーグルで「enforcer」プラグインを見つけました:

http://maven.apache.org/enforcer/enforcer-rules/requireReleaseDeps.html

-'onlyWhenRelease'フラグをtrueに設定すると、私がやりたいことを完全に実行する必要があるように見えます。

私の元の見出しの質問(「スナップショットだけでなく、Hudsonにリリースアーティファクトを自動的にビルドしてインストールさせるにはどうすればよいですか?」)に対する私の答えは次のとおりです。

  1. ハドソンにこれを行わせる完全に簡単な方法はないようです(ハドソンが検出するすべてのチェックインで「リリース」を実行しようとする副作用がなければ、実際の通常のアクションを停止するために追加の「プロファイル」構成が必要になる可能性がありますリリース、例:GPG署名)
  2. そうしないでください。
于 2010-10-21T23:28:25.123 に答える
0

ビルドをローカルにデプロイするかリモートにデプロイするかを決定するプロファイルを指定できます。

<project>
    <profile>
        <id>local-deploy</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <distributionManagement>
            <repository>
                <id>local-repo</id>
                <name>My Local Repo</name>
                <url>file://my/local/repo/dir</url>
            </repository>
        </distributionManagement>
    </profile>
    <profile>
        <id>remote-deploy</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <property>
                <name>remote.repo.url</name>    
            </property>
        </activation>

        <distributionManagement>
            <repository>
                <id>remote-repo</id>
                <name>My Remote Repo</name>
                <url>${remote.repo.url}</url>
            </repository>
        </distributionManagement>
    </profile>
</project>

その後、目標を安全に実行できrelease:performます。また、remote.repo.url の値を渡すことで、リモート デプロイのオプションも利用できます。

于 2010-10-21T05:55:12.133 に答える