¿Dónde colocar la configuración de Gradle (es decir, credenciales) que no se debe confirmar?


155

Estoy tratando de implementar un artefacto construido por Gradle en un repositorio de Maven, y necesito especificar las credenciales para eso. Esto funciona bien por ahora:

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

Pero no me gusta tener que almacenar las credenciales en el control de código fuente. Con Maven, definiría una configuración de servidor y asignaría credenciales en mi ~/.m2/settings.xml. ¿Cómo hago algo similar con Gradle?


3
Sabes que usar admin123 como contraseña es malo desde una perspectiva de seguridad, cierto;)
jwatkins

Respuestas:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
¿ gradle.propertiesNo debe registrarse en VCS?
theblang

24
No el que está en la página de inicio de usuario de Gradle (consulte la ruta anterior).
Peter Niederwieser

Para algunas versiones de graduados ... Use mavenPass en lugar de mavenPassword
Rodrigo

2
Aconsejo pasar las propiedades del proyecto de la siguiente manera (nombre de usuario: project.properties.mavenUser, contraseña: project.properties.mavenPassword). Esto no fallará en una compilación cuando no se especifiquen las propiedades mavenUser / Password.
Dmitry

Tuve que hacer lo mismo pero usar 2 variables de entorno diferentes: SONATYPE_NEXUS_USERNAME y SONATYPE_NEXUS_PASSWORD
Snicolas

94

La primera respuesta sigue siendo válida, pero la API ha cambiado en el pasado. Como mi edición no fue aceptada, la publico como respuesta por separado.

El método authentication()solo se utiliza para proporcionar el método de autenticación (por ejemplo, Básico) pero no ninguna credencial.

¡Tampoco deberías usarlo ya que está imprimiendo las credenciales en caso de falla!

Así es como debería verse en tu build.gradle

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

En gradle.propertiessu directorio de inicio de usuario, ponga:

mavenUser=admin
mavenPassword=admin123

También asegúrese de que GRADLE_USER_HOMEesté configurado para que, de lo ~/.gradlecontrario, el archivo de propiedades no se resuelva.

Ver también:

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

y

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


¿Podría aclarar cómo utilizaría esto el OP? es decir, dónde se ubicaría en el espacio de nombres uploadArchives {repositorios {mavenDeployer {
Matt C

Lo siento pero no recibo tu pregunta
cuestionario

44
El OP utiliza la autenticación dentro del espacio de nombres uploadArchives> repositorios> mavenDeployer> repositorio> autenticación. Supongo que aún querrían usar uploadArchives, entonces, ¿cómo se vería la configuración de compilación del OP con su solución aplicada? ¿Necesitan eliminar la autenticación y funcionará?
Matt C

En realidad no puedo decírtelo ya que nunca usé el espacio de nombres mavenDeployer. Uploadarchives sigue siendo una tarea válida, pero las credenciales para esa tarea se configuran dentro del espacio de nombres de Maven.
cuestionario

Esta respuesta es incompatible con la pregunta. Está usando el maven-publishcomplemento mientras que la pregunta está usando el mavencomplemento.
Chry Cheng

16

También puede proporcionar variables en la línea de comando con -PmavenUser=user -PmavenPassword=password.

Esto puede ser útil si no puede usar un archivo gradle.properties por alguna razón. Por ejemplo, en un servidor de compilación, estamos usando Gradle con la -gopción para que cada plan de compilación tenga el suyo GRADLE_HOME.


16

Si tiene credenciales específicas de usuario (es decir, cada desarrollador puede tener un nombre de usuario / contraseña diferente), entonces recomendaría usar el complemento gradle-properties .

  1. Poner valores predeterminados en gradle.properties
  2. Cada desarrollador anula con gradle-local.properties(esto debe ignorarse).

Esto es mejor que anular el uso $USER_HOME/.gradle/gradle.propertiesporque diferentes proyectos pueden tener los mismos nombres de propiedad.


¿Podría agregar un MWE completo que funcione? Cómo incluir el complemento en build.gradle. ¿Cómo usar las credenciales en la uploadArchivesconfiguración?
koppor

@koppor No estoy seguro de si esto todavía funciona, pero lo he usado en mi proyecto de código abierto - github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

Puede poner las credenciales en un archivo de propiedades y leerlo usando algo como esto:

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

Otro enfoque es definir variables de entorno a nivel del sistema operativo y leerlas usando:

System.getenv()['YOUR_ENV_VARIABLE']

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.