Git Credentials

Es ist auf Dauer müßig, immer und immer wieder die Credentials einzugeben. Daher gibt den internen Credentials Store von Git, aber dieser speichert nur SSH Credentials.

git config --global credentials.helper 'store --file ~/.git-credentials'

Lösung für HTTP(s) Verbindungen

Es gibt im AUR das Paket git-credential-gnome-keyring. Der Helper ermöglicht es auch für HTTP Verbindungen die Credentials zu speichern.

yaourt -S --noconfirm git-credential-gnome-keyring

Nun muss der Helper nur noch git bekannt gemacht werden:

git config --global credential.helper /usr/lib/git-core/git-credential-libsecret

Jetzt speichert Git die Credentials im Gnome-Keyring.

Die Ausgabe des Logos von Jooq verhindern

Beim Starten eines Queries wird normalerweise das Logo von Jooq ausgegeben. Das ist auch nicht weiter schlimm, es ist nur beim Debuggen der Anwendung manchmal ein wenig störend, weil es viel Platz auf der Konsole einnimmt.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@  @@        @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@        @@@@@@@@@@
@@@@@@@@@@@@@@@@  @@  @@    @@@@@@@@@@
@@@@@@@@@@  @@@@  @@  @@    @@@@@@@@@@
@@@@@@@@@@        @@        @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@        @@        @@@@@@@@@@
@@@@@@@@@@    @@  @@  @@@@  @@@@@@@@@@
@@@@@@@@@@    @@  @@  @@@@  @@@@@@@@@@
@@@@@@@@@@        @@  @  @  @@@@@@@@@@
@@@@@@@@@@        @@        @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@  @@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  Thank you for using jOOQ 3.11.9

Dank geht an dieser Stelle an Lukas Eder für dieses tolle Werkzeug.

Wie kann nun das Logo abgeschaltet werden? Dazu muss nur die Property org.jooq.no-logo auf true gesetzt werden. Ich löse das in dem ich eine Klasse JooqConfig mit einem Bean erstelle. Die Komponente wird so beim Component Scan gefunden und die Property gesetzt, sodass beim Starten kein Logo angezeigt wird.

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
public class JooqConfig {
    @Bean
    private void disableLogo() {
        System.setProperty("org.jooq.no-logo", "true");
    }
}

Credentials auslagern

Neben der Möglichkeit die Credentials mit dem Gradle Plugin Credentials zu verwalten, kann man auch zum Beispiel dieses in eine weitere Datei auszulagern. Hierfür bietet sich YAML an.

Hier die jooq.yaml

---
jdbc:
  password: secret
  username: usr

In dem Buildscript jooq.gradle lesen wir die Daten aus dem YAML ein. Das SnakeYaml nutze ich hierfür um die cfg zu definieren.

...
jooq {
  def cfg = new org.yaml.snakeyaml.Yaml().load(new File("" + rootProject.projectDir + "/jooq.yml").newInputStream())
...

Weiter unten im Abschnitt xxx können jetzt die Credentials aus dem jooq.yaml angegeben werden…

...
    jdbc {
      driver = 'org.mariadb.jdbc.Driver'
      url = 'jdbc:mariadb://server:3306/database'
      username = cfg.jdbc.username
      password = cfg.jdbc.password
    }
...

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.