2013-02-12 39 views
36

我正在使用Travis-CI爲我正在開發的幾個Java開源項目提供持續集成構建。爲基於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

什麼是配置Maven和/或Travis跳過CI測試版本的GPG簽名的最佳方式,但是當我做適當的版本構建時仍然執行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 2015-08-13 16:19:48

+0

或者,您可以使用值爲「true」的激活屬性名稱「$ {env.TRAVIS}」。這是因爲Travis-CI容器與各種內置的環境變量(包括例如'TRAVIS = true'和'CI = true')混合在一起,Maven可以通過maven語法檢測環境變量'$ {env 。 }'。這種方法具有不需要爲每個Maven命令添加系統屬性的好處,但仍然允許您模擬激活配置文件並在CI構建過程中自動激活配置文件。 – 2016-12-16 08:21:08

73

禁用GPG簽署加入下面的一行到你的.travis.yml文件:

install: mvn install -DskipTests -Dgpg.skip 

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

+0

我在Maven和msysgit中出現了奇怪的gpg錯誤。你的回答幫助了我。謝謝 – friederbluemle 2013-10-16 03:37:09

+4

請注意,爲CI構建添加'skipTests'可能不是最好的主意。 – chrylis 2014-04-24 22:19:24

+5

一般而言,你是對的,但不在這裏;-)請參閱:http://docs.travis-ci.com/user/languages/java/ – 2014-04-24 22:24:30

10

我發現一個稍微簡單的方法來完成above所描述的配置文件。您可以使用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 )。

+0

如果你使用一個保存命令歷史的shell,我強烈建議不要這樣做,因爲你可能不希望你的GPG密碼短語在你的'〜/ .bash_history'文件或其他什麼地方浮動。 (僅供參考:我知道這些日子裏唯一知道的_doesn't_保存歷史記錄是常規的DOS命令提示符。) – 2018-02-12 14:44:03