我有几个项目想用 gpg 密钥对生成的工件进行签名。过去我使用 gpg 1.x(即旧版本),在此设置中,我在~/.m2/settings-security.xml
.
我不喜欢这样(但当时我写道,这是我设法运行的设置)。
我最近开始查看是否可以在不存储密码的情况下使其全部运行。所以现在~/.m2/settings.xml
我有这样的东西(这个配置文件是活动的):
<profile>
<id>signingkey</id>
<properties>
<gpg.executable>gpg2</gpg.executable>
<gpg.keyname>ABCDEF01</gpg.keyname>
</properties>
</profile>
在 pom.xml 我有这个基本配置的 maven-gpg-plugin
<build>
<plugins>
<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>
</execution>
</executions>
</plugin>
</plugins>
</build>
现在,当我在我的 Ubuntu 16.04 系统上执行此操作时,gpg-agent(gpg2 的一部分)和 gnome-keyring-daemon 在第一次使用后会记住密码。
因此,在这个系统上,我通常处于已经运行 gpg-agent 的情况,因此,当我mvn clean verify
在项目中对工件进行签名时,不会询问任何问题,因为密码在 gpg-agent 中可用。
到目前为止,一切都很好。
为了确保我拥有完美干净的软件构建(并且对于某些项目也确保正确安装所有工具),我经常从单独的 docker 环境构建/部署软件。
在这样一个“非常干净”的 docker 环境中,启动时没有 gpg-agent,我发现简单地运行mvn clean verify
会产生一个没有签名的构建,因为我得到了
You need a passphrase to unlock the secret key for
user: "Niels Basjes (Software Signing Key) <signed@basjes.nl>"
...
gpg: cancelled by user
据我所知,因为我应该输入密码但没有提供提示。
在这一点上,我只找到了一种解决方法,那就是gpg2 --sign pom.xml
在构建软件之前做一些事情,因为这会启动 gpg-agent 并向我显示一个输入密码的对话框。
我想要以一种我可以简单地进行更改的方式更改我的设置,mvn verify
并且第一次登录尝试将为我弹出密码对话框并将密码缓存在 gpg-agent 中。
基本上我的问题是如何做到这一点;或更好:设置它的正确方法是什么?