web-dev-qa-db-fra.com

Suppression de la signature GPG pour les constructions d'intégration continue basées sur Maven (Travis CI)

J'utilise Travis-CI pour fournir des constructions d'intégration continue pour quelques-uns Java des projets open source que je travaille.

Normalement, cela fonctionne bien, mais j'ai un problème lorsque le POM Spécifie GPG Signature, par ex.

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

Cela provoque l'échec de la construction Travis - apparemment parce qu'il n'a pas de phrase secrète disponible en cours d'exécution mvn install. Voir cette construction pour un exemple.

Quelle est la meilleure façon de configurer Maven et/ou Travis pour sauter la signature GPG pour les constructions de test CI, mais effectuez toujours la signature de GPG lorsque je fais une version de version correcte?

50
mikera

Vous devez créer un profil et assurez-vous de l'exécuter que lorsque vous effectuez la version de version.

Supprimez le plugin actuel et ajoutez-le dans un profil comme celui-ci:

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

Et puis lorsque vous avez besoin de faire une version, ajoutez la propriété à votre commande MVN:

mvn -DperformRelease=true ...
25
Peter

J'ai trouvé un moyen légèrement plus simple de le faire avec le profil comme décrit ci-dessus . Au lieu d'utiliser une nouvelle valeur de propriété, vous pouvez utiliser le GPG.PASPHRASE Propriété qui devra être fournie quand même lors de la signature. La section propriété modifiée est la suivante:

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

AVIS, qu'aucune valeur n'est requise puisque vous souhaitez que ce profil soit activé si une valeur est définie pour cette propriété.

La ligne de commande correspondante ressemble alors à ceci:

mvn <command> -Dgpg.passphrase=myverysupersecretpassphrase

Vous pouvez le tester en l'exécutant les deux manières suivantes:

mvn install

Aucun artefact signé sera généré et:

mvn install -Dgpg.passphrase=myverysupersecretpassphrase

Les artefacts signés sont créés.

Pour faire la publication réelle des artefacts, procédez comme suit:

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

L'indirection est nécessaire pour l'action de sortie car elle ne propage pas les arguments de la ligne de commande directement sur le processus engendré (voir http://maven.apache.org/plugins/maven-gpg-plugin/usage.html ).

11
Derk