コミットすべきではないGradle構成(つまり、資格情報)をどこに置くべきですか?


155

Gradleで構築されたアーティファクトをMavenリポジトリにデプロイしようとしています。そのための資格情報を指定する必要があります。これは今のところうまくいきます:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/snapshots/") {
                authentication(userName: "admin", password: "admin123")
            }
        }
    }
}

ただし、資格情報をソース管理に保存する必要はありません。Mavenを使用して、サーバー構成を定義し、自分の資格情報を割り当てます~/.m2/settings.xml。Gradleで同様のことをするにはどうすればよいですか?


3
セキュリティの観点からは、admin123をパスワードとして使用するのは悪いことですよね;)
jwatkins '12

回答:


228

〜/ .gradle / gradle.properties

mavenUser=admin
mavenPassword=admin123

build.gradle

...
authentication(userName: mavenUser, password: mavenPassword)

2
gradle.propertiesにチェックインすべきではありませんVCSか?
theblang 2014

24
Gradleユーザーホームにあるものではありません(上記のパスを参照)。
Peter Niederwieser 2014

Gradleの一部のバージョンについて... mavenPasswordの代わりにmavenPassを使用する
Rodrigo

2
次のようにプロジェクトのプロパティを渡すことをお勧めしますauthentication(userName:project.properties.mavenUser、password:project.properties.mavenPassword)これは、プロパティmavenUser / Passwordが指定されていない場合にビルドが失敗することはありません。
ドミトリー

私は同じことをしなければなりませんでしたが、2つの異なる環境変数を使用しました。SONATYPE_NEXUS_USERNAME&SONATYPE_NEXUS_PASSWORD
Snicolas

94

最初の答えはまだ有効ですが、APIは以前に変更されています。私の編集は受け入れられなかったので、別の回答として投稿します。

この方法authentication()は、認証方法(例:基本)を提供するためにのみ使用され、資格情報は提供されません。

あなたも 、失敗したときに資格情報を表示するので使用しないでください

これはあなたの中でどのように見えるべきか build.gradle

    maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp.net/'
   }

ではgradle.properties、あなたのUSERHOMEディレクトリプットで:

mavenUser=admin
mavenPassword=admin123

また、 GRADLE_USER_HOME~/.gradle、プロパティファイルが解決されないように設定され。

以下も参照してください。

https://docs.gradle.org/current/userguide/build_environment.html

そして

https://docs.gradle.org/current/userguide/dependency_management.html(23.6.4.1


これがOPによってどのように使用されるかを明確にできますか?つまり、名前空間のどこに配置されるのかuploadArchives {リポジトリ{mavenDeployer {
Matt C

申し訳ありませんが、私はあなたの質問を取得しません
質問票

4
OPは、名前空間uploadArchives>リポジトリ> mavenDeployer>リポジトリ>認証内で認証を使用します。彼らは私が想定するuploadArchivesを引き続き使用したいと思うので、ソリューションを適用したOPのビルド構成はどのように見えるでしょうか?認証を削除する必要がありますか?それは機能しますか?
Matt C

mavenDeployer名前空間を使用したことがないので、実際にはわかりません。Uploadarchivesは引き続き有効なタスクですが、そのタスクの資格情報はmaven名前空間内で構成されます。
アンケート

この回答は質問と互換性がありません。maven-publish質問はプラグインを使用していますが、プラグインを使用していmavenます。
Chry Cheng

16

コマンドラインでを使用して変数を指定することもできます-PmavenUser=user -PmavenPassword=password

これは、何らかの理由でgradle.propertiesファイルを使用できない場合に役立ちます。たとえば、ビルドサーバーでGradleを-gオプションとともに使用して、各ビルドプランが独自のものになるようにしGRADLE_HOMEます。


16

ユーザー固有の資格情報がある場合(つまり、各開発者が異なるユーザー名/パスワードを持っている可能性がある場合)、gradle-properties-pluginを使用することをお勧めします

  1. デフォルトを入れる gradle.properties
  2. 各開発者はでオーバーライドしますgradle-local.properties(これはgit無視する必要があります)。

$USER_HOME/.gradle/gradle.properties異なるプロジェクトが同じプロパティ名を持っている可能性があるため、これを使用してオーバーライドするよりも優れています。


完全に機能するMWEを追加できますか。プラグインをに含める方法build.gradle。構成で資格情報を使用する方法uploadArchives
koppor

@kopporこれがまだ機能するかどうかはわかりませんが、私のオープンソースプロジェクトで使用しています-github.com/krishnaraj/oneclipboard/blob/master/build.gradle
クリシュナ

7

資格情報をプロパティファイルに入れ、次のようなものを使用して読み取ることができます。

Properties props = new Properties() 
props.load(new FileInputStream("yourPath/credentials.properties")) 
project.setProperty('props', props)

別のアプローチは、OSレベルで環境変数を定義し、以下を使用してそれらを読み取ることです。

System.getenv()['YOUR_ENV_VARIABLE']

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.