Gradle publish mit hidden Credentials

Gradle Publish

Mit gradle publish kann ich ein Artefakt auf das Nexus Repository schieben, um es dort für andere Anwednungen vorzuhalten. Dazu binde ich per apply from: ein weiteres Skript ein, dass die Aufgabe erledigt.

// Include Gradle Skript um auf ein Nexus Repository zu deployen.
apply from: 'publishToNexus.gradle'

Das Skript publishToNexus.gradle sieht wie folgt aus:

// add sources
task sourcesJar(type: Jar) {
    from sourceSets.main.allJava
    classifier = 'sources'
}

def nexusUser = "MrY@gmail.com"
def nexusPassword = "MySecret"

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact sourcesJar
            groupId 'de.pfau'
        }
    }
    repositories {
        maven {
            credentials {
                username nexusUser
                password nexusPassword
            }
            url "${nexusUrl}/repository/edvpfau"
        }
    }
}

Es liegt in der Natur der Sache, dass das Plugin die Creditials benötigt. Es muss sich ja gegenüber dem Repository Authentifizieren. Nun ist es aber keine gute Idee das Skript so im SCM abzulegen, da jetzt jedem, der Zugriff auf die Sourcen hat, es möglich ist auch auf das Nexus Repository Zugriff zu erlangen.

Credentials Plugin für Gradle

Das Gradle Credentials Plugin löst genau dieses Problem, indem es eine vershlüsselte Version ablegt und dieses auf Anfrage dem Skript zur Verfügung stellt. Dazu muss man nur die Zeile wo das Nexus Passwort festgelegt wird abändern.

def nexusPassword = credentials."${nexusUser}"

Das Password bekannt machen

Damit wir jetzt auf das Passwort zugreifen können, muss dieses gesetzt werden. Mit dem Task addCredentials kann ein Value für ein Key, hier der Benutzername bestehend aus der Emailaddresse, gesetzt werden.

./gradlew addCredentials -PcredentialsKey="MrY@gmail.com" -PcredentialsValue="mySecred"

So kann das Gradle Buildscript gepusht werden, nur derjenige der dieses Feature benötigt auch die Credentials kennen muss.