2013-02-12 3 views
36

私が取り組んでいるいくつかのJavaオープンソースプロジェクトの継続的な統合ビルドを提供するのにTravis-CIを使用しています。Mavenベースの継続的統合ビルドのGPG署名を無効にする(Travis CI)

通常これはスムーズに機能しますが、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> 

これはトラヴィスが失敗する原因となる構築 - それはmvn installの実行中に利用できるパスフレーズを持っていないので、明らかに。例については、this buildを参照してください。

CIテストビルドのGPG署名をスキップするようにMavenやTravisを設定するのに、適切なリリースビルドを実行してもGPG署名を実行する最良の方法はありますか?

答えて

20

プロファイルを作成する必要があります。&リリースビルドを行うときにのみ実行してください。

現在のプラグインを削除し、そしてこのようなプロファイルでそれを追加します。

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

リリースプラグインを使用していると仮定します。フラグを介してアクティブ化を使用する代わりに、そのプロファイルを 'releaseProfiles'プラグイン設定に追加するだけで済みます。 – ankon

+0

また、活性化プロパティー名 '$ {env.TRAVIS}'を 'true'の値にすることもできます。これはTravis-CIコンテナが様々なビルトイン環境変数(例えばTRAVIS = true'と 'CI = true'を含む)でスピンアップされ、Mavenが環境変数' $ {env 。 } 'この方法では、すべてのMavenコマンドにシステムプロパティを追加する必要はありませんが、引き続きプロファイルのアクティブ化を模擬し、CIビルド中にプロファイルの自動アクティベーションを行うことができます。 –

73

install: mvn install -DskipTests -Dgpg.skip 

E:あなたの.travis.ymlファイルに次の行を追加して

無効にGPG署名例:https://github.com/stefanbirkner/system-rules/blob/master/.travis.yml

+0

Mavenとmsysgitで奇妙なgpgエラーが発生しました。あなたの答えは私を助けました。ありがとう – friederbluemle

+4

CIビルドに 'skipTests'を追加するのが最善の方法ではないかもしれないことに注意してください。 – chrylis

+5

一般的にあなたは正しいですが、ここにはありません;-)参照:http://docs.travis-ci.com/user/languages/java/ –

10

aboveのようなプロファイルでやや簡単な方法が見つかりました。新しいプロパティ値を使用する代わりに、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 )。

+0

'〜/ .bash_history'ファイルなどでGPGパスフレーズを浮かべないようにするため、コマンド履歴を保存するシェルを使用している場合は、この方法を強くお勧めします。 (参考:これらの日に私が知っている唯一のシェルは、通常のDOSコマンドプロンプトです。 –

関連する問題