【问题标题】:How do I get the maven-gpg-plugin to use a passphrase from environment variable or command line property?如何让 maven-gpg-plugin 使用来自环境变量或命令行属性的密码?
【发布时间】:2015-03-04 16:39:44
【问题描述】:

我见过: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>

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

【问题讨论】:

    标签: maven gnupg


    【解决方案1】:

    编辑:此解决方案仅适用于 gnupg 2.1.x。 2.0.x 无法识别 --pinentry-mode 命令行参数并且它崩溃了。不幸的是,在 mavens 中,除了第二个配置文件之外,我不知道如何让它根据哪个版本的 gnupg 做正确的事情。它可能需要更新插件才能以“正确”的方式进行。

    天哪,我刚刚想通了,您必须为 gpg 指定一对参数,以将其 pinentry-mode 更改为“loopback”一旦您完成此操作,它将尊重 gpg。密码短语值,来自环境变量或用户属性。哇,这太晦涩了。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 2023-01-15
        • 1970-01-01
        • 2018-11-18
        • 2015-09-21
        • 2012-11-17
        相关资源
        最近更新 更多