2015-03-04 6 views
5

Ich habe gesehen: Avoid gpg signing prompt when using Maven release plugin aber es ist für eine sehr alte Version von Maven, und ich verwende 3.2.2, so dass die gleiche Lösung nicht zutrifft.Wie bekomme ich das maven-gpg-plugin zur Verwendung eines Passwortes aus der Umgebungsvariable oder der Kommandozeilen-Eigenschaft?

Grundsätzlich egal, welche Kombination von Eigenschaften in der Befehlszeile, Eigenschaften in der pom.xml oder Umgebungsvariablen Ich kann nicht das Maven Gpg-Plugin zu vermeiden, den Agent-Dialog auftauchen.

Wir haben uns aus Sicherheitsgründen dazu entschlossen, die Passphrase nicht in der settings.xml im Klartext anzugeben, da dies eine schreckliche Idee ist. Und mit dem verschlüsselten Maven-Zeug bewegt man einfach den Hauptschlüssel in eine andere einfache Textdatei.

Software-Versionen:

$ gpg --version 
gpg (GnuPG) 2.1.2 
libgcrypt 1.6.2 

$ mvn --version 
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T08:51:42-05:00) 

I

mvn -Dgpg.passphrase='lolpassphrase' 

Mit den Eigenschaften in der pom.xml versucht haben, sie aus der Umwelt zu erhalten:

 <properties> 
      <gpg.keyname>E7C89BBB</gpg.keyname> 
      <gpg.passphrase>${env.GPG_PASSPHRASE}</gpg.passphrase> 
     </properties> 

und dann:

GPG_PASSPHRASE='lolpassphrase' mvn install 

EDIT: Anscheinend mein GPG-Agent wurde in der Quere und der GPG-Agent wird noch zu uns liegt ich veranlassen, wenn ich das aktuelle Passwort in den pom.xml Eigenschaften :(

 <properties> 
      <gpg.keyname>E7C89BBB</gpg.keyname> 
      <gpg.passphrase><![CDATA[lolcomplicatedpassphrase]]></gpg.passphrase> 
     </properties> 

Es gesetzt Es muss ein Weg sein, dies zu tun, ohne das Passwort irgendwo im Klartext zu behalten, aber ich kann die richtigen googles nicht benutzen, um diese Antwort zu finden, in der Hoffnung, dass ihr mir helfen könnt.

Antwort

5

EDIT: diese Lösung nur funktioniert auf gnupg 2.1.x. 2.0.x erkennt den Kommandozeilenparameter --pinentry-mode nicht und es explodiert. Leider gibt es in den mavens keine Möglichkeit, neben einem zweiten Profil zu wissen, dass es das Richtige für welche Version von gnupg macht. Es würde wahrscheinlich ein Update für das Plugin benötigen, um es "richtig" zu machen.

Herrje, ich dies nur herausgefunden, Sie müssen ein Paar Argumente angeben GPG es pinentry-Modus zu ‚Loopback‘ ändern Sobald Sie dies getan haben, wird es den gpg.passphrase Wert zu ehren, entweder aus einer Umgebungsvariablen oder aus einer Benutzereigenschaft. Wow, das war dunkel.

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-gpg-plugin</artifactId> 
        <version>1.6</version> 
        <executions> 
         <execution> 
          <id>sign-artifacts</id> 
          <phase>verify</phase> 
          <goals> 
           <goal>sign</goal> 
          </goals> 
          <configuration> 
           <!-- This is necessary for gpg to not try to use the pinentry programs --> 
           <gpgArguments> 
            <arg>--pinentry-mode</arg> 
            <arg>loopback</arg> 
           </gpgArguments> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin>