抑制基于Maven的持续集成构build的GPG签名(Travis CI)

我正在使用Travis-CI为我正在开发的一些Java开源项目提供持续集成构build。

通常这工作顺利,但我有一个问题,当POM指定GPG签名,例如

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.4</version> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> 

这会导致Travis构build失败 – 显然是因为在运行mvn install时没有可用的密码。 查看这个版本的例子。

configurationMaven和/或Travis跳过CItesting版本的GPG签名的最佳方法是什么,但是当我执行正确的版本构build时仍然执行GPG签名?

您需要创build一个configuration文件,并确保您只有在执行发布版本时才运行该configuration文件。

删除当前的插件,并将其添加到像这样的configuration文件中:

 <profiles> <profile> <id>release-sign-artifacts</id> <activation> <property> <name>performRelease</name> <value>true</value> </property> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>1.4</version> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> 

然后,当你真的需要做一个释放,添加属性到你的mvn命令:

 mvn -DperformRelease=true ... 

通过.travis.yml添加到.travis.yml文件来禁用GPG签名:

 install: mvn install -DskipTests -Dgpg.skip 

例如: https : //github.com/stefanbirkner/system-rules/blob/master/.travis.yml

我发现了一个稍微简单的方法来完成上述configuration文件。 而不是使用新的属性值,你可以使用gpg.passphrase属性,在签名时需要提供。 修改后的属性部分如下所示:

 <activation> <property> <name>gpg.passphrase</name> </property> </activation> 

请注意,没有值是必需的,因为如果为该属性设置了任何值,则需要激活此configuration文件。

相应的命令行如下所示:

 mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase 

您可以通过运行以下两种方法来testing:

 mvn install 

没有签名的工件被生成,并且:

 mvn install -Dgpg.passphrase=myverysupersecretpassphrase 

签名的工件被创build。

要执行工件的实际签名版本,请执行以下操作:

 mvn release:perform -Darguments=-Dgpg.passphrase=myverysupersecretpassphrase 

发布操作需要间接性,因为它不会将命令行参数直接传播到衍生进程(请参阅http://maven.apache.org/plugins/maven-gpg-plugin/usage.html )。