커밋해서는 안되는 Gradle 구성 (예 : 자격 증명)을 어디에 두어야합니까?


155

Gradle 빌드 아티팩트를 Maven 저장소에 배치하려고하는데 그에 대한 신임 정보를 지정해야합니다. 이것은 현재 잘 작동합니다.

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

그러나 자격 증명을 소스 제어에 저장하는 것을 좋아하지 않습니다. Maven을 사용하면 서버 구성을 정의하고 내 자격 증명을 할당합니다 ~/.m2/settings.xml. Gradle과 비슷한 것을 어떻게합니까?


3
당신은 암호로 admin123과를 사용하여, 보안 측면에서 바로 나쁜 것을 알고)
jwatkins

답변:


228

~ / .gradle / gradle.properties :

mavenUser=admin
mavenPassword=admin123

build.gradle :

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

2
gradle.properties체크인하지 않아야 VCS합니까?
theblang

24
Gradle 사용자 홈의 사용자가 아닙니다 (위의 경로 참조).
피터 Niederwieser

일부 버전의 gradles의 경우 mavenPassword 대신 mavenPass를 사용하십시오.
Rodrigo

2
인증 (사용자 이름 : project.properties.mavenUser, 암호 : project.properties.mavenPassword)과 같이 프로젝트 속성을 전달하는 것이 좋습니다. mavenUser / Password 속성이 지정되지 않은 경우 빌드가 실패하지 않습니다.
Dmitry

나는 똑같은 일을했지만 2 가지 환경 변수를 사용해야했습니다 .SONATYPE_NEXUS_USERNAME & SONATYPE_NEXUS_PASSWORD
Snicolas

94

첫 번째 답변은 여전히 ​​유효하지만 API는 과거에 변경되었습니다. 내 편집 내용이 수락되지 않았으므로 별도의 답변으로 게시했습니다.

이 방법 authentication()은 인증 방법 (예 : 기본) 만 제공하지만 자격 증명은 제공하지 않습니다.

당신은 또한 그것을 사용하지 말아야 은 실패에 일반 자격 증명을 인쇄 이후로!

이것은 그의 모습이 build.gradle

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

에서 gradle.properties당신의 USERHOME dir을 넣어에서 :

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)


이것이 OP에 의해 어떻게 사용 될지 명확히 할 수 있습니까? 즉, 이름 공간 uploadArchives {리포지토리 {mavenDeployer {
Matt C

죄송하지만 질문을받지 못했습니다
설문

4
OP는 네임 스페이스 uploadArchives> 저장소> mavenDeployer> 저장소> 인증 내에서 인증을 사용합니다. 그들은 여전히 ​​내가 생각하는 uploadArchives를 사용하고 싶을 것이므로 OP의 빌드 구성은 솔루션을 어떻게 적용했을까요? 인증을 제거해야합니까?
매트 C

실제로 mavenDeployer 네임 스페이스를 사용한 적이 없기 때문에 말할 수 없습니다. Uploadarchives는 여전히 유효한 작업이지만 해당 작업의 자격 증명은 maven 네임 스페이스 내에 구성됩니다.
앙케이트

이 답변은 질문과 호환되지 않습니다. maven-publish플러그인을 사용하는 반면 질문 은 플러그인을 사용하고 maven있습니다.
Chry Cheng

16

명령 줄에 변수를 제공 할 수도 있습니다 -PmavenUser=user -PmavenPassword=password.

이것은 어떤 이유로 gradle.properties 파일을 사용할 수없는 경우에 유용 할 수 있습니다. 예를 들어 빌드 서버에서 Gradle을 -g옵션 과 함께 사용하여 각 빌드 계획에 고유 한 옵션이 있습니다 GRADLE_HOME.


16

사용자 별 자격 증명이있는 경우 (즉, 개발자마다 다른 사용자 이름 / 암호를 가질 수 있음) gradle-properties-plugin을 사용하는 것이 좋습니다 .

  1. 기본 설정 gradle.properties
  2. 각 개발자는로 재정의합니다 gradle-local.properties(git ignore 여야 함).

$USER_HOME/.gradle/gradle.properties다른 프로젝트는 동일한 속성 이름을 가질 수 있기 때문에이를 재정의하는 것보다 낫습니다 .


제대로 작동하는 MWE를 추가 할 수 있습니까? 방법의 플러그인을 포함합니다 build.gradle. uploadArchives구성 에서 자격 증명을 사용하는 방법은 무엇입니까?
koppor

@koppor 이것이 여전히 작동하는지 확실하지 않지만 오픈 소스 프로젝트에서 사용했습니다 -github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

신임 정보를 특성 파일에 넣고 다음과 같이 사용하여 읽을 수 있습니다.

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

또 다른 방법은 OS 레벨에서 환경 변수를 정의하고 다음을 사용하여 읽는 것입니다.

System.getenv()['YOUR_ENV_VARIABLE']

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.