60

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

通常这很顺利,但是当 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 构建失败 - 显然是因为它在运行时没有可用的密码mvn install。有关示例,请参见此构建。

配置 Maven 和/或 Travis 以跳过 CI 测试构建的 GPG 签名,但在我进行正确的发布构建时仍执行 GPG 签名的最佳方法是什么?

4

3 回答 3

102

通过将以下行添加到您的.travis.yml文件中来禁用 GPG 签名:

install: mvn install -DskipTests -Dgpg.skip

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

于 2013-03-06T21:12:00.633 回答
30

您需要创建一个配置文件并确保仅在您进行发布构建时运行该配置文件。

删除当前插件,并将其添加到配置文件中,如下所示:

<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 ...
于 2013-02-14T07:21:47.997 回答
13

我找到了一种稍微简单的方法来使用上述配置文件您可以使用gpg.passphrase属性,而不是使用新的属性值,在进行签名时无论如何都需要提供该属性。修改后的属性部分如下:

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

请注意,不需要任何值,因为如果为该属性设置了任何值,您希望激活此配置文件。

相应的命令行如下所示:

mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase

您可以通过以下两种方式运行它来测试它:

mvn install

不会生成签名的工件,并且:

mvn install -Dgpg.passphrase=myverysupersecretpassphrase

创建签名的工件。

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

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

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

于 2014-10-05T14:43:01.743 回答