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.