web-dev-qa-db-ja.com

現在のビルド番号をJenkinsビルドからGradleデーモンに渡す方法はありますか?

GradleスクリプトでJenkinsビルド番号にアクセスするには、次のコマンドを呼び出します。

def buildNumber = System..getenv('BUILD_NUMBER')

初めてビルドを実行したときは正常に動作します。 2回目のビルドの実行時には、数値は増分されず、前回のビルド実行と同じままです。 4.4.1バージョンのGradleを使用しています。以前のバージョンで同じ問題が発生したことを覚えていません。

私の現在の回避策は、-no-daemonスイッチをGradleに渡すことです。ただし、そうするとデーモン機能の恩恵を受けることができません。デーモンを使用して、Gradleビルドで正しいビルド番号を取得する方法はありますか?

10
Dan

Java 9を使用していますか?Java 9を使用すると、Gradleがデーモンの環境を変更することはできなくなります-したがって、environmentを使用してプロパティを渡すことはできません変数。ログに次の警告が表示されます。

Warning: Unable able to set daemon's environment variables to match the client because: 
Java 9 does not support modifying environment variables.

代わりに、Gradleのコマンドラインから'BUILD_NUMBER'をシステムプロパティ(-DbuildNumber=$BUILD_NUMBER)またはGradleプロジェクトプロパティ(-PbuildNumber=$BUILD_NUMBER)として渡すことができます。

6
wolfs42

特別なブロックでSystemenvを読み取ることにより、これが議論され、解決されたようです gradleフォーラムで

class Globals {
  String buildNr =  System.getenv( 'BUILD_NUMBER' ).toString()
}
ext {
   globals = new Globals()
}

// reference it like:
println "value of BUILD_NUMBER = " + globals.buildNr
0
tkruse

私は通常、redisを使用してビルド番号を格納するタイムスタンプを使用してKey-Valueストアを構築します。このようにして、任意のクライアント間でデータを分離して取得し、データを送受信できます。

0
Remario