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例については、このビルドを参照してください。

CI テスト ビルドの GPG 署名をスキップするように Maven や Travis を構成する最善の方法は何ですか?

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

次の 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を参照)。

于 2014-10-05T14:43:01.743 に答える