Куда поместить конфигурацию Gradle (т.е. Учетные данные), которая не должна быть зафиксирована?

Я пытаюсь развернуть Gradle -строенный артефакт в репозиторий Maven, и мне нужно указать учетные данные для этого. На данный момент это отлично работает:

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

Но мне не нравится хранить учетные данные в исходном элементе управления. С Maven я бы определил конфигурацию сервера и назначил учетные данные в моем ~/.m2/settings.xml. Как мне сделать что-то подобное с Gradle?

Ответ 1

~/.gradle/ gradle.properties

mavenUser=admin
mavenPassword=admin123

build.gradle

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

Ответ 2

Первый ответ по-прежнему действителен, но API в прошлом изменился. Поскольку мое редактирование не было принято, я отправляю его как отдельный ответ.

Метод authentication() используется только для предоставления метода аутентификации (например, Basic), но не для всех учетных данных.

Вы также не должны использовать его, так как он печатает учетную запись plain при ошибке!

Это, как он должен выглядеть в вашем 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)

Ответ 3

Если у вас есть пользовательские учетные данные (т. Е. У каждого разработчика могут быть разные имя пользователя и пароль), я бы порекомендовал использовать плагин gradle-properties-plugin.

  1. Поместите значения по умолчанию в gradle.properties
  2. Каждый разработчик переопределяет с помощью gradle-local.properties (это следует игнорировать git).

Это лучше, чем переопределение с использованием $USER_HOME/.gradle/gradle.properties потому что разные проекты могут иметь одинаковые имена свойств.

Ответ 4

Вы также можете указать переменные в командной строке с помощью -PmavenUser=user -PmavenPassword=password.

Это может быть полезно, что вы не можете использовать файл gradle.properties по какой-либо причине. Например. на сервере сборки мы используем Gradle с опцией -g, чтобы каждый план сборки имел свой собственный GRADLE_HOME.

Ответ 5

Вы можете поместить учетные данные в файл свойств и прочитать его, используя что-то вроде этого:

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

Другой подход - определить переменные среды на уровне ОС и прочитать их, используя:

System.getenv()['YOUR_ENV_VARIABLE']

Ответ 6

Для тех из вас, кто использует MacOS и не любит оставлять свой пароль открытым текстом на своем компьютере, вы можете использовать инструмент цепочки для ключей, чтобы сохранить учетные данные, а затем внедрить их в сборку. Кредиты достаются Виктору Эрикссону. https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/