有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在使用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时没有可用的密码短语。有关示例,请参见this build

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


共 (2) 个答案

  1. # 1 楼答案

    我找到了一个稍微简单一点的方法来使用above描述的概要文件。您可以使用gpg,而不是使用新的属性值。密码短语属性,在进行签名时无论如何都需要提供该属性。修改后的属性部分如下所示:

    <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
    

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

  2. # 2 楼答案

    您需要创建一个配置文件&;确保只有在进行发布构建时才运行它

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

    <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 ...