我有几个项目,我想用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-剂。
到目前为止一切顺利。
为了确保我拥有完全干净的软件构建(并且对于某些项目也确保所有工具都已正确安装),我经常从单独的docker环境构建/部署软件。
在这样一个非常干净的&#39; 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中缓存密码。
基本上我的问题是如何做到这一点;或者更好:设置它的正确方法是什么?
答案 0 :(得分:0)
您可以使用以下配置:
<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>
<executable>gpg2</executable>
<gpgArguments>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
</gpgArguments>
<passphrase>${gpg.passphrase}</passphrase>
</configuration>
</execution>
</executions>
</plugin>
使用配置文件将gpg密码放入settings.xml文件中,然后使用该配置文件进行构建。属性名称是固定的,不能更改。 您还可以使用gpg.executable属性以这种方式设置可执行文件
<properties>
<gpg.passphrase>MySpecialPassword</gpg.passphrase>
</properties>