抑制基于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 )。