設定
子プロジェクトを含むプロジェクトがあり、子の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 options
jenkinsJobB構成のフィールドの値です。
-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
が表示されていますが、結果は何も変更されていません。