Tłumienie podpisywania GPG dla kompilacji ciągłej integracji opartych na Mavenie (Travis CI)
UżywamTravis-CI , aby zapewnić ciągłą integrację dla kilku projektów Java open source, nad którymi pracuję.
Normalnie 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>
Powoduje to niepowodzenie kompilacji Travis-najwyraźniej dlatego, że nie ma hasła dostępnego podczas działania mvn install
. Zobacz this build dla przykładu.
Jak najlepiej skonfigurować Mavena i / lub Travisa do pomijać podpisywanie GPG dla kompilacji testowych CI, ale nadal wykonywać podpisywanie GPG, gdy wykonuję poprawną kompilację wydania?
3 answers
Musisz utworzyć profil i upewnić się, że uruchamiasz go tylko wtedy, gdy wykonujesz release build.
Usuń aktualną wtyczkę i dodaj ją do profilu takiego jak:
<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, gdy rzeczywiście musisz zrobić release, dodaj właściwość do komendy mvn:
mvn -DperformRelease=true ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-14 07:21:47
Wyłączenie podpisywania GPG poprzez dodanie następującej linii do pliku .travis.yml
:
install: mvn install -DskipTests -Dgpg.skip
Przykład: https://github.com/stefanbirkner/system-rules/blob/master/.travis.yml
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-13 13:51:46
Znalazłem nieco prostszy sposób, aby to zrobić z profilem, jak opisano powyżej . Zamiast używać nowej wartości właściwości, możesz użyć gpg.passphrase właściwość, która i tak będzie musiała zostać dostarczona podczas podpisywania. Zmodyfikowana sekcja właściwości jest następująca:
<activation>
<property>
<name>gpg.passphrase</name>
</property>
</activation>
Zauważ, że żadna wartość nie jest wymagana, ponieważ chcesz, aby ten profil został aktywowany, jeśli jakakolwiek wartość jest ustawiona dla tej właściwości.
Odpowiedni wiersz poleceń wygląda wtedy następująco to:
mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase
Możesz to przetestować, uruchamiając go na dwa sposoby:
mvn install
Nie generuje się podpisanych artefaktów, oraz:
mvn install -Dgpg.passphrase=myverysupersecretpassphrase
Podpisane artefakty są tworzone.
Aby zrobić rzeczywiste podpisane wydanie artefaktów, wykonaj następujące czynności:
mvn release:perform -Darguments=-Dgpg.passphrase=myverysupersecretpassphrase
Indirection jest potrzebna dla akcji release, ponieważ nie propaguje argumentów linii poleceń bezpośrednio do procesu wywołanego (zobacz http://maven.apache.org/plugins/maven-gpg-plugin/usage.html).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:40