Dove mettere la configurazione Gradle (cioè le credenziali) che non dovrebbe essere impegnata?


155

Sto cercando di distribuire un artefatto creato da Gradle in un repository Maven e per questo devo specificare le credenziali. Per ora funziona benissimo:

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

Ma non mi piace dover archiviare le credenziali nel controllo del codice sorgente. Con Maven, definirei una configurazione del server e assegnerei le credenziali nel mio ~/.m2/settings.xml. Come faccio a fare qualcosa di simile con Gradle?


3
Sai che usare admin123 come password è male dal punto di vista della sicurezza, giusto;)
jwatkins,

Risposte:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
Dovrebbe gradle.propertiesnon essere controllato in VCS?
theblang,

24
Non quello nella home page dell'utente Gradle (vedere il percorso sopra).
Peter Niederwieser,

Per alcune versioni di gradi ... Usa mavenPass invece di mavenPassword
Rodrigo

2
Consiglio di passare le proprietà del progetto come segue autenticazione (userName: project.properties.mavenUser, password: project.properties.mavenPassword) Questo non fallirà un build quando non sono specificate proprietà mavenUser / Password.
Dmitry,

Ho dovuto fare lo stesso, ma per usare 2 diverse variabili d'ambiente: SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas,

94

La prima risposta è ancora valida, ma l'API è cambiata in passato. Poiché la mia modifica non è stata accettata, la inserisco come risposta separata.

Il metodo authentication()viene utilizzato solo per fornire il metodo di autenticazione (ad es. Base) ma non le credenziali.

Inoltre , non dovresti usarlo poiché stampa le credenziali in caso di errore!

Questo è come dovrebbe apparire nel tuo build.gradle

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

Nella gradle.propertiestua directory homehome inserisci:

mavenUser=admin
mavenPassword=admin123

Assicurarsi inoltre che GRADLE_USER_HOMEsia impostato su ~/.gradlealtrimenti il ​​file delle proprietà non verrà risolto.

Guarda anche:

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

e

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


Potresti chiarire come questo sarebbe utilizzato dall'OP? cioè dove si troverebbe nello spazio dei nomi uploadArchives {repository {mavenDeployer {
Matt C

Scusa ma non ho ricevuto la tua domanda
questionario

4
L'OP utilizza l'autenticazione nello spazio dei nomi uploadArchives> repository> mavenDeployer> repository> autenticazione. Vorrebbero comunque utilizzare uploadArchives presumo, quindi come apparirebbe la configurazione build del PO con la tua soluzione applicata? Devono rimuovere l'autenticazione e funzionerà?
Matt C

In realtà non posso dirtelo poiché non ho mai usato lo spazio dei nomi mavenDeployer. Uploadarchives è ancora un'attività valida ma le credenziali per quell'attività sono configurate nello spazio dei nomi di Maven.
questionario

Questa risposta è incompatibile con la domanda. Sta usando il maven-publishplugin mentre la domanda usa il mavenplugin.
Chry Cheng,

16

È inoltre possibile fornire variabili nella riga di comando con -PmavenUser=user -PmavenPassword=password.

Questo potrebbe essere utile per qualche motivo non è possibile utilizzare un file gradle.properties. Ad esempio su un server di build stiamo usando Gradle con l' -gopzione in modo che ogni piano di build abbia il suo GRADLE_HOME.


16

Se si dispone di credenziali specifiche dell'utente (ovvero ogni sviluppatore potrebbe avere un nome utente / password diversi), si consiglia di utilizzare il plug-in gradle-properties .

  1. Inserisci le impostazioni predefinite gradle.properties
  2. Ogni sviluppatore ha la precedenza su gradle-local.properties(questo dovrebbe essere ignorato git).

Questo è meglio dell'override usando $USER_HOME/.gradle/gradle.propertiesperché diversi progetti potrebbero avere gli stessi nomi di proprietà.


Potresti aggiungere un MWE funzionante completo. Come includere il plugin in build.gradle. Come utilizzare le credenziali nella uploadArchivesconfigurazione?
koppor

@koppor Non sono sicuro che funzioni ancora, ma l'ho usato nel mio progetto open source - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

È possibile inserire le credenziali in un file delle proprietà e leggerlo usando qualcosa del genere:

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

Un altro approccio è definire le variabili di ambiente a livello di sistema operativo e leggerle usando:

System.getenv()['YOUR_ENV_VARIABLE']

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.