如何让maven-gpg-plugin使用环境变量或命令行属性的密码呢?

时间:2015-03-04 16:39:44

标签: maven gnupg

我见过:Avoid gpg signing prompt when using Maven release plugin但它是一个非常旧版本的maven,而我使用的是3.2.2,所以同样的解决方案不适用。

基本上,无论命令行中的属性组合,pom.xml中的属性或环境变量,我都无法获取maven gpg插件以避免弹出代理对话框。

出于安全原因,我们已决定不在settings.xml中以纯文本形式包含密码,因为这是一个糟糕的主意。使用加密的maven东西只需将主密钥移动到另一个纯文本文件。

软件版本:

$ 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)

我试过了

mvn -Dgpg.passphrase='lolpassphrase'

使用pom.xml中的属性从环境中获取它:

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

然后:

GPG_PASSPHRASE='lolpassphrase' mvn install 
编辑:显然我的gpg代理人正在挡路,骗我 如果我在pom.xml属性中设置实际密码短语,GPG代理将仍然提示我:(

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

必须有一种方法可以做到这一点,而不用在纯文本中保存密码,但我无法使用正确的谷歌找到这个答案,希望你们可以帮助我。

2 个答案:

答案 0 :(得分:9)

编辑:此解决方案适用于gnupg 2.1.x. 2.0.x无法识别--pinentry-mode命令行参数,它会爆炸。不幸的是,在专家中,除了第二个配置文件之外,我无法知道每个版本的gnupg都能做正确的事情。它可能需要对插件进行更新才能实现&#34;对&#34;方式。

Jeez,我只想出了这个,你必须为gpg指定一对参数,以便将它的pinentry-mode改为&#39; loopback&#39;完成此操作后,它将遵循环境变量或用户属性中的gpg.passphrase值。哇哇哇哇。

                <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>

答案 1 :(得分:3)

您可以使用不使用 gpg 的插件 https://www.simplify4u.org/sign-maven-plugin/ 进行签名,因此您不需要将提供的密码短语作为环境变量进行复杂的配置。

sign-maven-plugin 只支持所有配置项作为环境变量。