Gdzie umieścić konfigurację Gradle (tj. Poświadczenia), której nie należy zatwierdzać?


155

Próbuję wdrożyć artefakt zbudowany przez Gradle do repozytorium Maven i muszę określić poświadczenia do tego. Na razie działa to dobrze:

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

Ale nie lubię przechowywać poświadczeń w kontroli źródła. W Maven zdefiniowałbym konfigurację serwera i przypisałbym poświadczenia w moim ~/.m2/settings.xml. Jak zrobić coś podobnego w Gradle?


3
Wiesz, że używanie admin123 jako hasła jest złe z punktu widzenia bezpieczeństwa, prawda;)
jwatkins

Odpowiedzi:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
Powinno gradle.propertiesnie być sprawdzana w celu VCS?
theblang

24
Nie ten w katalogu domowym użytkownika Gradle (patrz ścieżka powyżej).
Peter Niederwieser

W przypadku niektórych wersji klas ... Użyj mavenPass zamiast mavenPassword
Rodrigo

2
Radzę przekazywać właściwości projektu w następujący sposób uwierzytelnianie (nazwa_użytkownika: projekt.properties.mavenUser, hasło: projekt.properties.mavenPassword). Budowanie nie zakończy się niepowodzeniem, jeśli nie określono właściwości mavenUser / Password.
Dmitry

Musiałem zrobić to samo, ale użyć 2 różnych zmiennych środowiskowych: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

Pierwsza odpowiedź jest nadal aktualna, ale interfejs API zmienił się w przeszłości. Ponieważ moja zmiana nie została zaakceptowana, zamieszczam ją jako oddzielną odpowiedź.

Metoda authentication()służy tylko do podania metody uwierzytelniania (np. Basic), ale nie do podania żadnych poświadczeń.

Nie powinieneś go również używać, ponieważ wyświetla dane uwierzytelniające w przypadku awarii!

Tak to powinno wyglądać w Twoim build.gradle

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

W gradle.propertiesswoim katalogu userhome umieść:

mavenUser=admin
mavenPassword=admin123

Zapewniają również, że GRADLE_USER_HOMEjest ustawiony ~/.gradleinaczej plik właściwości nie zostanie rozwiązany.

Zobacz też:

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

i

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


Czy mógłby Pan wyjaśnić, jak zostanie to wykorzystane przez PO? tj. gdzie by siedział w przestrzeni nazw uploadArchives {repozytoria {mavenDeployer {
Matt C

Przepraszam, ale nie dostaję twojego pytania
ankietowany

4
OP korzysta z uwierzytelniania w przestrzeni nazw uploadArchives> repositories> mavenDeployer> repository> authentication. Zakładam, że nadal chcieliby używać uploadArchives, więc jak wyglądałaby konfiguracja kompilacji OP po zastosowaniu twojego rozwiązania? Czy muszą usunąć uwierzytelnianie i to zadziała?
Matt C

Właściwie nie mogę ci powiedzieć, ponieważ nigdy nie korzystałem z przestrzeni nazw mavenDeployer. Uploadarchives jest nadal prawidłowym zadaniem, ale poświadczenia tego zadania są konfigurowane w przestrzeni nazw maven.
questionaire

Ta odpowiedź jest niezgodna z pytaniem. Używa maven-publishwtyczki, podczas gdy pytanie używa mavenwtyczki.
Chry Cheng

16

Możesz również podać zmienne w wierszu poleceń za pomocą -PmavenUser=user -PmavenPassword=password.

Może to być przydatne, ponieważ z jakiegoś powodu nie możesz użyć pliku gradle.properties. Na przykład na serwerze kompilacji używamy Gradle z -gopcją, aby każdy plan budowy miał swój własny GRADLE_HOME.


16

Jeśli masz poświadczenia specyficzne dla użytkownika (tj. Każdy programista może mieć inną nazwę użytkownika / hasło), polecam użycie wtyczki gradle-properties-plugin .

  1. Umieść wartości domyślne w gradle.properties
  2. Każdy deweloper zastępuje gradle-local.properties(to powinno być ignorowane przez git).

Jest to lepsze niż zastępowanie używania, $USER_HOME/.gradle/gradle.propertiesponieważ różne projekty mogą mieć takie same nazwy właściwości.


Czy mógłbyś dodać pełną działającą MWE. Jak dołączyć wtyczkę do build.gradle. Jak używać poświadczeń w uploadArchiveskonfiguracji?
koppor

@koppor Nie jestem pewien, czy to nadal działa, ale użyłem go w moim projekcie open source - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

Możesz umieścić poświadczenia w pliku właściwości i odczytać je, używając czegoś takiego:

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

Innym podejściem jest zdefiniowanie zmiennych środowiskowych na poziomie systemu operacyjnego i odczytanie ich przy użyciu:

System.getenv()['YOUR_ENV_VARIABLE']

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.