2

2 つのブランチを持つプロジェクトの 2 つの CI プロファイルを統合しようとしています。ブランチには1master晩に 1 回ビルドされるプロダクション ブランチが含まれ、devブランチには開発ブランチが含まれます。

DEV ブランチのサフィックスを自動化するため-SNAPSHOTに、次の POM を適用しました。

<version>1.1.11${build.suffix}</version>
<properties>
    <build.suffix>-SNAPSHOT</build.suffix>
</properties>

それから私は2つのビルド構成を持っています.prodはjenkinsに-Dbuild.suffix=".$BUILD_NUMBER"割り当てられていますが、mavenは常にサフィックスなしでビルドされているようで、常に各ビルドの最後に置かれます.MAVEN_OPTS-SNAPSHOT

ローカルで実行すると正常に動作します。

mvn -Dbuild.suffix=".123" clean package

正常に動作します。

次の警告も表示されます。私がやろうとしていることを行うためのより良い方法はありますか?

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.johnsands:unite:war:1.1.11-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.johnsands:unite:1.1.11${build.suffix}, /Users/bryan/Development/unite/pom.xml, line 11, column 12
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
4

3 に答える 3

1

maven がタグで式を許可しなくなったのには理由があります。<version>関連する行をコピーして貼り付けています...

デプロイされた pom はプロパティ値が解決されないため、その pom に依存する人は ${ } で補間されていない文字列として依存関係を取得し、ビルド プロセスで多くの陽気さが起こります。

具体的にはmaven バージョン pluginを見ることができますmvn version:setが、これはファイルを変更しpom.xml、CI 環境内では意味がありません。

于 2013-10-25T08:14:11.443 に答える
0

助けが必要な人のために私がしたことは次のとおりです。

  1. Raghuram の提案に従って、バージョンを設定するためにmaven バージョン プラグインを使用しています。
  2. 私の DEV ブランチには常に-SNAPSHOTテキストが含まれており、prod ブランチはオプションです。
  3. PROD でビルド前のスクリプトを使用してバージョンを抽出し、-SNAPSHOTテキストを削除してバージョンに追加.$BUILD_NUMBERし、それをversions:setで設定します。
  4. ビルド後のスクリプトは、バージョン プラグインがバックアップする元の pom を復元します。

それでまとめる。

ビルド前のスクリプト:バージョン番号を取得するためのよりクリーンな方法を教えてくれる人がいれば、知りたいです:

ver=$(sed -n '/<version>/{p;q;}' pom.xml|grep '<version>'|sed 's/.*>\(.*\)<.*/\1/' | sed 's/-SNAPSHOT//').$BUILD_NUMBER
echo "Setting version to $ver"
mvn -DnewVersion="$ver" versions:set

ビルド後のスクリプト

test -f pom.xml.versionsBackup && mv pom.xml.versionsBackup pom.xml 

開発サイクルでは、通常は迅速にマージされるバグ修正ブランチを更新する際にバージョン番号を必要としないことが保証されます。その後、安全に prod ブランチにマージして戻すことができます。

于 2013-10-28T00:22:18.340 に答える