2013-02-12 12 views
36

Korzystam z Travis-CI, aby zapewnić ciągłe kompilacje integracyjne dla kilku projektów Java open source, nad którymi pracuję.Tłumienie podpisu GPG dla opartych na Maven kompilacji ciągłej integracji (Travis CI)

Zwykle działa to płynnie, ale mam problem, gdy POM określa podpisywanie GPG, np.

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

To powoduje, że Travis budować na niepowodzenie - podobno dlatego, że nie posiada hasło dostępne podczas pracy mvn install. Zobacz przykład this build.

Jaki jest najlepszy sposób na skonfigurowanie Maven i/lub Travis, aby pominąć podpisywanie GPG dla testów testowych CI, ale nadal wykonuj podpisywanie GPG, kiedy robię poprawną wersję wydania?

Odpowiedz

20

Musisz utworzyć profil &, upewnij się, że uruchamiasz go tylko podczas kompilacji wydania.

Usuń bieżący wtyczki i dodać go w profilu tak:

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

i wtedy, kiedy rzeczywiście trzeba zrobić uwolnienia, dodać właściwość do mvn polecenia:

mvn -DperformRelease=true ... 
+1

Zakładając, że korzystasz z wtyczki wydania: zamiast aktywacji za pomocą flagi możesz dodać ten profil do ustawienia wtyczki 'releaseProfiles'. – ankon

+0

Alternatywnie można wprowadzić nazwę właściwości aktywacji '$ {env.TRAVIS}' o wartości "true". Dzieje się tak dlatego, że kontenery Travis-CI są odwirowane przy użyciu różnych wbudowanych zmiennych środowiskowych (w tym na przykład 'TRAVIS = true' i' CI = true'), a Maven może je wykryć za pomocą składni maven dla zmiennych środowiskowych '$ {env . } '. Takie podejście ma tę zaletę, że nie wymaga dodawania właściwości systemowej do każdego polecenia Maven, ale nadal pozwala na pozorowanie aktywacji profilu i automatyczną aktywację profilu podczas kompilacji CI. –

73

Wyłącz GPG podpisanie dodając następującą linię do pliku .travis.yml:

install: mvn install -DskipTests -Dgpg.skip 

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

+0

Otrzymałem dziwne błędy gpg z Maven i msysgit. Twoja odpowiedź mi pomogła. Dzięki – friederbluemle

+4

Pamiętaj, że dodanie 'skipTests' dla kompilacji CI może nie być najlepszym pomysłem. – chrylis

+5

Generalnie masz rację, ale nie tutaj ;-) Zobacz: http://docs.travis-ci.com/user/languages/java/ –

10

znalazłem nieco prostszy sposób to zrobić z profilem opisanym above. Zamiast używać nowej wartości właściwości, można użyć właściwości gpg.passphrase, która będzie wymagana mimo to podczas podpisywania. Zmodyfikowany odcinek jest następująca:

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

odnotować, że żadna wartość nie jest wymagane, ponieważ chcesz tego profilu, aby uaktywnić jeśli wartość jest ustawiona na tej nieruchomości.

odpowiednim wierszu poleceń wtedy wygląda to tak:

mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase 

Można to sprawdzić przez uruchomienie go na dwa sposoby:

mvn install 

Nie podpisane artefakty generowana oraz:

mvn install -Dgpg.passphrase=myverysupersecretpassphrase 

Podpisane artefakty zostają utworzone.

Aby wykonać rzeczywistą podpisaną uwalnianie artefaktów wykonaj następujące czynności:

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

pośrednie jest potrzebne do działania zwalniającego ponieważ nie propagować argumenty wiersza polecenia bezpośrednio do zrodził procesu (patrz http://maven.apache.org/plugins/maven-gpg-plugin/usage.html).

+0

Zdecydowanie odradzam takie podejście, jeśli używasz powłoki, która zapisuje historię poleceń, ponieważ prawdopodobnie nie chcesz, aby Twoje hasło GPG było unoszące się w pliku '~/.bash_history' lub czymkolwiek innym. (FYI: Jedyna powłoka, jaką znam w tych dniach, że nie zapisuję historii, to zwykły wiersz poleceń DOS). –

Powiązane problemy