2017-05-21 4 views
1

Ich versuche, mein Maven-Projekt mit Standard Maven Release-Plugin und Bitbucket-Pipelines zu lösen. Ich habe mein eigenes Docker-Image mit einem privaten Schlüssel erstellt, der mit einer Passphrase geschützt ist. Mein Bitbucket-Konto ermöglicht Commits von diesem Andock-Image, und die Bitbucket-Pipeline kann beim Erstellen eine private Passphrase über die Umgebungsvariable eingeben.So übergeben Sie die Passphrase an den privaten Schlüssel beim Freigeben mit dem Standard-Maven-Plugin

Das Problem ist, dass Maven Release-Plugin alles ignoriert und fragt nach Passphrase, die ein inakzeptabler manueller Schritt ist.

Mein settings.xml in /root/.m2 sieht aus wie

<server> 
    <id>bitbucket.org</id> 
    <privateKey>/root/.ssh/id_rsa</privateKey> 
    <passphrase>${env.BB_PIPELINES_MAVEN_3_3_9_JDK_8_SSH_PASSPHRASE</passphrase> 
</server> 

ich die neueste Version und scm Plugins verwenden, bzw. 2.5.3 und 1.9.5

In meinem pom.xml gibt es Servereigenschaft

<project.scm.id>bitbucket.org</project.scm.id> 

und meine scm URLs sind wie

<scm> 
    <url>https://bitbucket.org/user/repo</url> 
    <developerConnection>scm:git:[email protected]:user/repo</developerConnection 
    <connection>scm:git:[email protected]:user/repo</connection> 
</scm> 

Ich habe versucht, ssh-agent zu verwenden, und es scheint zu funktionieren, aber sieht aus wie ssh-agent nicht erlaubt, Passphrase in der Befehlszeile auch zu übergeben.

Irgendwelche Ideen wie kann es gelöst werden?

Antwort

1

Ich habe es geschafft, einige Workaround mit Expect und Ssh-Agent zu tun.

In meinem .bashrc habe ich

setzen
eval `ssh-agent -s` 
/root/load-private-key.sh $BITBUCKET_PIPELINES_MAVEN_3_3_9_JDK_8_SSH_PASSPHRASE 

und meine load-private-key.sh Datei sieht aus wie

#!/usr/bin/expect -f 
set password [lindex $argv 0]; 
set timeout 10 
spawn ssh-add /root/.ssh/id_rsa 
expect "Enter passphrase for /root/.ssh/id_rsa: " 
sleep 1 
send $password\n 
expect "Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)" 

Jetzt kann jeder Build-Sitzung mit dem Laden in den privaten Schlüsselspeicher beginnt die kann mit dem Standard Maven Release Plugin verwendet werden.

Verwandte Themen