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?

Author: Cœur, 2013-02-12

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 ...
 28
Author: Peter,
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

 97
Author: Stefan Birkner,
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).

 11
Author: Derk,
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