maven code-signing maven-release-plugin gnupg

Evite la solicitud de firma de gpg cuando use el complemento de lanzamiento de Maven



code-signing maven-release-plugin (4)

La contraseña de GPG en settings.xml es una solución funcional, pero está abierta y esto es malo. Solución alternativa, que había utilizado en mis proyectos, es la siguiente:

stty -echo && printf "GPG password: " && read gpgPwd && printf ''/n'' && stty echo mvn release:prepare -Darguments="-Dgpg.passphrase=$gpgPwd" git push git push --tags mvn release:perform -Darguments="-Dgpg.passphrase=$gpgPwd" unset gpgPwd

Configuraciones adicionales requeridas:

export GPG_TTY=$(tty) (in the ~/.bash_profile) maven-release-plugin/configuration/pushChanges=false (in the root pom.xml)

Tengo un proyecto de Maven que estoy tratando de configurar para usar el complemento de versión de Maven. Parte del proceso de lanzamiento es utilizar el complemento GPG de Maven para firmar artefactos que requieren, entre otras cosas, la frase clave de firma GPG para tener éxito. Debido a que estas compilaciones deben ejecutarse en un entorno no interactivo, (servidor CI) estos parámetros se pasan como argumentos a maven en forma de

-Dgpg.passphrase=XXX

Para instantáneas construye todo funciona bien; el complemento GPG de Maven ve la contraseña que se pasa, los artefactos se construyen, firman y despliegan como se espera, sin embargo, cuando intento usar el complemento de lanzamiento, se me solicita la contraseña de la clave de firma gpg. He leído varias discusiones sobre problemas similares que surgen del complemento de lanzamiento que incluye otra invocación de maven que no recibe los parámetros pasados. La solución más popular parece ser usar el parámetro "argumentos" como este:

-Darguments="-Dgpg.passphrase=XXX"

Supuestamente esto se pasa a la instancia bifurcada, pero desafortunadamente para mí no se está deshaciendo del aviso.

Dado que la firma de artefactos no es un requisito previo poco común para implementar artefactos de lanzamiento en repositorios públicos y presumiblemente, la mayoría de las entidades que producen esos artefactos utilizan algún tipo de IC No puedo imaginar que sea la única persona que ha encontrado este problema. ¿Alguien ha encontrado una solución?

UNA NOTA SOBRE LA RESPUESTA ACEPTADA:

La solución aceptada no funcionará con Maven 3.0 - 3.0.3 y 3.0.3, sino que es lo que se instala por defecto con Java en OSX Mountain Lion. Vea aquí para los detalles. Tendrá que actualizar a 3.0.4.


Si no desea tener la contraseña en texto sin cifrar en su configuración.xml y no quiere / no puede usar gpg-agent, puede configurar el cifrado de contraseñas .

Primero debe configurar una contraseña maestra para maven (asumiendo que maven 3.2.1+ de lo contrario tiene que pasar la contraseña como argumento):

mvn -emp

Esto devolverá una versión encriptada de la contraseña. Almacene esta contraseña en ~/.m2/settings-security.xml ; debe verse así:

<settingsSecurity> <master>{inY3jdvspkeO2RUTxzQ4xHPelos+9EF1iFQyJQ=}</master> </settingsSecurity>

Luego encripta la contraseña clave con:

mvn -ep

Y use la contraseña encriptada generada en settings.xml (la identificación del perfil debe coincidir con el perfil que usa, aquí usé la release por lo que tendría que ejecutar maven como mvn -P release release:prepare etc. - alternativamente, puede hacerlo parte de los perfiles activos como se detalla en otra respuesta):

<servers> <server> <id>gpg.passphrase</id> <passphrase>{inY3jdvspkeO2RUTxzQ4xHPelos}</passphrase> </server> </servers> <profiles> <profile> <id>release</id> <properties> <gpg.keyname>6DF60995</gpg.keyname> </properties> </profile> </profiles>


Solo configúralo en un perfil en settings.xml y actívalo por defecto:

<settings> <profiles> <profile> <id>gpg</id> <properties> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>mypassphrase</gpg.passphrase> </properties> </profile> </profiles> <activeProfiles> <activeProfile>gpg</activeProfile> </activeProfiles> </settings>

Como puede ver, puede hacer eso con cualquier propiedad ... por ejemplo, también otros nombres de usuario y contraseñas para el complemento jarsigner y así sucesivamente.

Esto debería estar siempre activo. Puede depender del uso de una versión más nueva de Maven, pero siempre puede depurar esto con

mvn help:active-profiles

Encriptando la contraseña

Los comentarios y otras respuestas indican que mantener las contraseñas en un archivo no es seguro ... Esto es cierto hasta cierto punto, pero afortunadamente Maven nos permite hacerlo muy seguro al crear una contraseña maestra y luego cifrar todas las contraseñas en la configuración. .xml con ello.

Echa un vistazo a la mini guía de cifrado de contraseñas para más detalles.


Tener su contraseña GPG en un archivo en su directorio de inicio es una seguridad absolutamente horrible.

En su lugar, use gpg-agent, por lo que solo necesita ingresar su contraseña una vez por sesión. Una vez instalado, puedes configurar tu shell para hacer algo como:

eval $(gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info) export GPG_TTY=$(tty) export GPG_AGENT_INFO

a continuación, actualice su complemento para habilitar el agente. Puede hacer esto ya sea en el pom, o en un perfil en su configuración.xml puede ser mejor:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <configuration> <useAgent>true</useAgent> </configuration> </plugin>

o probablemente sea mejor y más portátil hacer esto en tu configuración:

<profile> <id>gpg-profile</id> <properties> <gpg.useagent>true</gpg.useagent> </properties> </profile>

Luego, la primera vez en una sesión en que se necesita la frase de contraseña de gpg, aparece un cuadro de diálogo. Cada vez después de eso, usa la frase de contraseña del agente.