Подавление подписки GPG на сборку непрерывной интеграции Maven (Travis CI)
Я использую Travis-CI, чтобы обеспечить непрерывные сборки интеграции для нескольких проектов с открытым исходным кодом Java, над которыми я работаю.
Обычно это работает плавно, но у меня есть проблема, когда 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>
Это приводит к сбою сборки Travis - видимо, потому что у нее нет кодовой фразы, доступной при запуске mvn install
. См. эту сборку для примера.
Каков наилучший способ настроить Maven и/или Travis для пропуска подписки GPG для сборки тестов CI, но все же выполнять подписание GPG, когда я делаю правильную версию сборки?
Ответы
Ответ 1
Вам нужно создать профиль и убедиться, что вы запустите его только при создании сборки.
Удалите текущий плагин и добавьте его в такой профиль:
<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 ...
Ответ 2
Отключить подписку GPG, добавив следующую строку в ваш файл .travis.yml
:
install: mvn install -DskipTests -Dgpg.skip
Пример: https://github.com/stefanbirkner/system-rules/blob/master/.travis.yml
Ответ 3
Я нашел несколько более простой способ сделать это с профилем, описанным выше . Вместо использования нового значения свойства вы можете использовать свойство 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
Косвенное указание необходимо для действия release, потому что оно не передает аргументы командной строки непосредственно в порожденный процесс (см. http://maven.apache.org/plugins/maven-gpg-plugin/usage.html).