4

設定

子プロジェクトを含むプロジェクトがあり、子のMavenリリースを実行したい(プロジェクトB):

Project-A/
  pom.xml
  Project-B/
    pom.xml
    src/

Project-Aのフォルダーは、同時に私のgitリポジトリーであり、中央のgitサーバーから複製します。

このリリースでは、JenkinsMavenリリースプラグインを使用してビルドサーバーとしてjenkinsを使用し、リリースビルドを開始します。

したがって、jenkinsジョブ(JobBと呼ばれる)が開始された後、Project-Aフォルダーを次の場所にチェックアウトします/Users/titan/.jenkins/jobs/JobB/workspace

gitの動作方法により、構造の最上位のみを複製できます。つまり、jenkinsでビルドするpomをProject-B / pom.xmlに設定する必要があります。これにより、mavenが作業を行うために使用する作業ディレクトリが変更されます。

これにより、mavenリリースプラグインが間違ったディレクトリにコミットしようとするため、gitで多くの問題が発生します(Project-A / Project-B /が有効なgitリポジトリであると想定しています)。このような問題はすべて解決できました(リリースを実行するときにリモートリポジトリへのプッシュを非アクティブ化し、リリースを実行するときに正しいscm URLを指定することで)。

これは、Release goals and optionsjenkinsJobB構成のフィールドの値です。

-X -DpreparationGoals="clean install" 
-DpushChanges=false 
-DconnectionUrl=scm:git:file:///Users/titan/.jenkins/jobs/JobB/workspace 
release:prepare release:perform

変更をgitリモートサーバーにプッシュせず、maven:performの開始時に実行されるクローンがチェックアウトする必要のあるタグを見つけられないため、connectionUrlのファイルURLが必要です。

問題

そして、結局のところ、これは私が解決できない私の問題です:

maven:prepareステップが実行され、すべての作業が実行されます(pomでバージョン番号を変更し、リリースタグを作成します)。次に、maven:performステップが開始され、gitリポジトリからコンテンツのクローンが作成され、タグがターゲットフォルダーにチェックアウトされてから、deployコマンドが呼び出されます。

ただし、呼び出されたデプロイコマンドがトップレベルで呼び出されるため、Project-BではなくProject-Aがデプロイされるという問題があります。ジョブ自体はエラーなしで実行されており、間違ったものをビルドしてデプロイしているだけです。

デプロイを実行するためにmavenが生成するコマンドは次のとおりです。

[INFO] Executing goals 'deploy'...
[DEBUG] Using ${maven.home} of: '/usr/share/java/maven-3.0.3'.
[DEBUG] Executing: /bin/sh -c cd /Users/titan/.jenkins/jobs/jobB/workspace/Project-B/target/checkout && /usr/share/java/maven-3.0.3/bin/mvn -B -X -D maven.repo.local=/Users/titan/.m2/repository -s /Users/titan/.m2/settings.xml -D performRelease=true deploy

したがって、checkout/Project-B内ではなくcheckoutディレクトリ内でpomファイルを呼び出しています。興味深いことに、maven:prepareステップは正しいpomで実行されます。

これまでに試したこと

  • jenkinsを使用せず、シェルから直接mvmコマンドを呼び出します。これは私に同じ結果を与えます。したがって、ジェンキンスは問題ではないと思います。

  • -Darguments="-f sword-packaging-wbf/pom.xml"とで pomのパスを変更する-Darguments="-DpomFileName=sword-packaging-wbf/pom.xml"

    どちらの方法でも、結果は何も変わりません。そして、出力を見ると-f <path>、生成されたコマンドではが無視されていることがわかります。ここでは、-DpomFileNameが表示されていますが、結果は何も変更されていません。

4

1 に答える 1

8

つまり、これはあなたの組織が単に間違っていることを意味します。親を別のMavenモジュール(別のgitリポジトリ)に入れて解放します。子モジュールでは、親を使用して、子に別々のMavenモジュールとgitリポジトリを作成し、それらを別々にリリースします。それでおしまい。そうしないと、Mavenとの戦闘が開始され、戦闘が失われます。

于 2012-04-27T07:46:38.867 に答える