在Jenkins下运行时,maven-gpg插件失败,并显示“设备的ioctl不适当”

uemypmqf  于 2023-01-20  发布在  Jenkins
关注(0)|答案(4)|浏览(189)

当Jenkins在一个远程Linux shell中触发maven-gpg-plugin时,它会以gpg: signing failed: Inappropriate ioctl for device失败。直到最近,这一直有效。我不知道发生了什么变化。
我发现很多在线参考文献都建议使用export GPG_TTY=$(tty),但这对ssh连接不起作用,因为ttynull

icomxhvb

icomxhvb1#

我在https://myshittycode.com/2017/08/07/maven-gpg-plugin-prevent-signing-prompt-or-gpg-signing-failed-no-such-file-or-directory-error/找到了一个很好的解释
我会重新张贴的要点后,以防网页下降:
如果你1)最初让它在过去工作,2)已经尝试了各种解决方案,从网络上,仍然不能让它工作,机会是你已经不知不觉地升级GPG版本从2.0到2.1。
听起来不错...
要解决此问题,GPG 2.1要求将**--pinentry-mode设置为loopback**,以便获取Maven settings.xml中定义的gpg.passphrase值。
因此,将pom.xml中的Maven GPG插件配置更新为以下内容:

<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>
                <gpgArguments>
                    <arg>--pinentry-mode</arg>
                    <arg>loopback</arg>
                </gpgArguments>
            </configuration>
        </execution>
    </executions>
</plugin>
ngynwnxp

ngynwnxp2#

  • 以吉利的回答为基础 *

与其修改每一个pom.xml来让Jenkins满意,不如使用更新的gpg将以下内容添加到Jenkins slaves上的~/.gnupg/gpg.conf中:

pinentry-mode loopback

puppet

如果gpg版本是2.1或更高版本,我使用puppet创建gpg.conf文件时会用到这个条目:

模板
<% if scope.lookupvar("gpg_version").to_f >= 2.1 %>
pinentry-mode loopback
<% end %>

事实

Facter.add("gpg_version") do
  setcode do

    result = ''
    begin
      first_line = `gpg --version`.split("\n")[0]
      match = first_line.match /.* ([0-9\.]*)$/
      result = match[1]
    rescue

    end
    result
  end
end
izkcnapc

izkcnapc3#

升级到一个更新的maven-gpg-plugin版本对我有帮助,从1.5升级到3.0.1。
希望这对某些人来说至少是一次尝试🙏

mo49yndu

mo49yndu4#

这对我很有效:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.0.1</version>
<executions>
    <execution>
        <id>sign-artifacts</id>
        <phase>verify</phase>
        <goals>
            <goal>sign</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <gpgArguments>
        <argument>--pinentry-mode</argument>
        <argument>loopback</argument>
    </gpgArguments>
</configuration>
</plugin>

相关问题