web-dev-qa-db-ja.com

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署名を実行するための最良の方法は何ですか?

50
mikera

プロファイルを作成する必要があり、リリースビルドを実行するときのみプロファイルを実行する必要があります。

現在のプラグインを削除し、次のようなプロファイルに追加します。

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

.travis.ymlファイルに次の行を追加して、GPG署名を無効にします。

install: mvn install -DskipTests -Dgpg.skip

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

89
Stefan Birkner

上記 のように、プロファイルを使用してやや簡単な方法を見つけました。新しいプロパティ値を使用する代わりに、gpg.passphraseプロパティを使用できます。これは、署名を行うときにとにかく提供する必要があります。変更されたプロパティセクションは次のとおりです。

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

このプロパティに値が設定されている場合、このプロファイルをアクティブにするため、値は必要ありません。

対応するコマンドラインは次のようになります。

mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase

これは、次の2つの方法で実行することでテストできます。

mvn install

署名されたアーティファクトは生成されません。

mvn install -Dgpg.passphrase=myverysupersecretpassphrase

署名されたアーティファクトが作成されます。

アーティファクトの実際の署名付きリリースを実行するには、次の手順を実行します。

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

生成されたプロセスにコマンドライン引数を直接伝播しないため、リリースアクションには間接参照が必要です( http://maven.Apache.org/plugins/maven-gpg-plugin/usage.htmlを参照)。 )。

11
Derk