Подтвердить что ты не робот

Подавление подписки 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, когда я делаю правильную версию сборки?

4b9b3361

Ответ 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 ...

Ответ 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).