gradle.propertiesはリポジトリに含めるべきか
gradleのタスクのプロパティ値を定義できる
gradle.properties
で定義した値は、build.gradle
内で使うことが出来ます。
なので、署名時に必要な情報をgradle.properties
で定義してファイル自体はリポジトリに含めない方法を取っていました。
しかし、さまざまなプラグインで各プロジェクトのgradle.properties
で定義した値を使うことがあるため、リポジトリに含めないとTravis CIやサーバに用意したJenkinsなど、CIサーバでビルドするときにエラーが起きることが多々あります。
リポジトリに含めたくない情報は~/.gradle/gradle.properties
で定義する
~/.gradle/gradle.properties
で定義した値も、プロジェクトから参照できます。
各プロジェクトで定義した値と名前が重複していた場合は、~/.gradle/gradle.properties
で定義した値で上書きされます。
使い方
次のように使います。${module}
の部分は適宜置き換えてください。
~/.gradle/gradle.properties
... systemProp.${module}_store_pass=store_pass systemProp.${module}_alias=this is alias systemProp.${module}_key_pass="key pass" ...
${module}/build.gradle
... task valueTest << { println System.properties[project.getName() + '_store_pass'] println System.properties[project.getName() + '_alias'] println System.properties[project.getName() + '_key_pass'] }...
$ /.gradlew -q valueTest store_pass this is alias "key pass"
スペースでもクォーテーションで括る必要はありません。
プロジェクトのgradle.properties
はリポジトリに含める
これで機密情報と分離できるので、gradle.properties
をリポジトリに含めることができるようになります。
課題
自前のサーバに置いたJenkinsなら、~/.gradle/gradle.properties
に事前に記述できますが、CIホスティングサービスなどでは難しいので、タスクの引数に指定するか、テスト時はテスト用の署名にするなどの方法を取らないと難しそうです。
また、プロジェクトが増えてくると管理が大変かもしれません。もっとスマートな方法があればそちらで管理したいですね。