Как заставить gpg-agent запрашивать пароль при использовании в maven-gpg-plugin

У меня есть несколько проектов, в которых я хочу подписать полученные артефакты ключом gpg. В прошлом я использовал gpg 1.x (то есть старый), и в этой настройке у меня был зашифрованный пароль (но пригодный для использования) в ~/.m2/settings-security.xml,

Мне не нравится это (но в то время я написал, что это была установка, которую мне удалось запустить).

Недавно я начал проверять, смогу ли я запустить все это без сохранения паролей. Так что теперь в ~/.m2/settings.xml У меня есть что-то вроде этого (этот профиль активен):

<profile>
  <id>signingkey</id>
  <properties>
    <gpg.executable>gpg2</gpg.executable>
    <gpg.keyname>ABCDEF01</gpg.keyname>
  </properties>
</profile>

В pom.xml у меня есть maven-gpg-плагин с этим основным конфигом

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-gpg-plugin</artifactId>
      <version>1.6</version>
      <executions>
        <execution>
          <id>sign-artifacts</id>
          <phase>verify</phase>
          <goals>
            <goal>sign</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Теперь, когда я делаю это в моей системе Ubuntu 16.04, gpg-agent (часть gpg2) и gnome-keyring-daemon запоминают пароль после первого использования.

Так что в этой системе я обычно нахожусь в ситуации, когда у меня уже запущен gpg-agent и как таковой, когда я делаю mvn clean verify в моем проекте подписывает артефакты, не задавая никаких вопросов, потому что пароль доступен в gpg-agent.

Все идет нормально.

Чтобы убедиться, что у меня совершенно чистая сборка программного обеспечения (и для некоторых проектов также обеспечить правильную установку всех инструментов), я часто собираю / развертываю программное обеспечение из отдельной среды докера.

В такой "очень чистой" среде докера нет gpg-agent при запуске, и я обнаружил, что просто работает mvn clean verify даст сборку, которая не подписана, потому что я получаю

You need a passphrase to unlock the secret key for
user: "Niels Basjes (Software Signing Key) <signed@basjes.nl>"
...
gpg: cancelled by user

Насколько я могу сказать, потому что я должен был ввести пароль, но подсказка не была предоставлена.

На данный момент я нашел только один обходной путь, и это сделать что-то вроде gpg2 --sign pom.xml перед сборкой программного обеспечения, потому что запускает gpg-agent и показывает диалоговое окно для ввода пароля.

Я хотел бы изменить настройки таким образом, чтобы я мог просто mvn verify и первая попытка подписи вызовет диалоговое окно ввода пароля и кеширует пароль в gpg-agent.

По сути, мой вопрос, как это сделать; или лучше: как правильно это настроить?

1 ответ

Вы можете использовать следующую конфигурацию:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-gpg-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
                <goal>sign</goal>
            </goals>
            <configuration>
                <executable>gpg2</executable>
                <gpgArguments>
                    <arg>--pinentry-mode</arg>
                    <arg>loopback</arg>
                </gpgArguments>
                <passphrase>${gpg.passphrase}</passphrase>
            </configuration>
        </execution>
    </executions>
</plugin>

Поместите свой пароль gpg в ваш файл settings.xml с профилем и создайте его. Имя свойства фиксировано и не может быть изменено. Вы также можете использовать свойство gpg.executable для установки исполняемого файла таким же образом.

<properties>
    <gpg.passphrase>MySpecialPassword</gpg.passphrase>
</properties>
Другие вопросы по тегам