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

Posted

技术标签:

【中文标题】在 Jenkins 下运行时,maven-gpg-plugin 失败并显示“设备的 ioctl 不合适”【英文标题】:maven-gpg-plugin failing with "Inappropriate ioctl for device" when running under Jenkins 【发布时间】:2019-01-01 04:09:14 【问题描述】:

当 Jenkins 在远程 Linux shell 中触发 maven-gpg-plugin 时,它会以 gpg: signing failed: Inappropriate ioctl for device 失败。直到最近,这一直有效。我不知道发生了什么变化。

我发现很多在线参考建议 export GPG_TTY=$(tty) 但这不适用于 ssh 连接,因为 ttynull。有什么想法吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

我仍然收到gpg: signing failed: Inappropriate ioctl for device 的配置。我正在使用 Maven 3.6.3 和 GnuPG 2.2.12。 另外,这个特性显然是在(尚未发布的)maven-gpg-plugin 3.0.0 版中自动处理的:github.com/apache/maven-gpg-plugin/commit/… 我设法通过将&lt;configuration&gt; 部分移动到&lt;plugin&gt; 的正下方来使其正常工作

以上是关于在 Jenkins 下运行时,maven-gpg-plugin 失败并显示“设备的 ioctl 不合适”的主要内容,如果未能解决你的问题,请参考以下文章

Windows下Jenkins常见问题汇总

停止 PabotLib 进程后,Jenkins 工作卡住了

Jenkins的安装配置及使用

如何在windons下搭建jenkins步骤

ubuntu 中安装jenkins,基于docker运行jenkins

CentOS下安装Jenkins(Docker/war/tomcat/java -jar)