GitHub Actions部署Maven包遇gpg无终端输入错误求助
解决GitHub Actions部署Maven包时GPG签名无终端输入的问题
遇到gpg: Sorry, no terminal at all requested - can't get input报错,不用纠结修改gpg.conf,试试这几个可行方案:
方案1:给maven-gpg-plugin加非交互式参数
直接在pom.xml的maven-gpg-plugin配置里指定--batch和--no-tty,强制非交互式运行,同时通过环境变量传递密码:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> <configuration> <gpgArguments> <arg>--batch</arg> <arg>--no-tty</arg> <arg>--passphrase</arg> <arg>${gpg.passphrase}</arg> </gpgArguments> <passphraseServerId>gpg.passphrase</passphraseServerId> </configuration> </plugin>
然后在GitHub Actions的部署步骤里,通过环境变量注入密码:
- name: 部署到Maven Central run: mvn clean deploy -DskipTests env: GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
方案2:在Actions中手动配置GPG环境
在setup-java步骤之后,添加步骤导入密钥并生成临时gpg.conf,覆盖默认设置:
- name: 导入GPG密钥 run: | echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --batch --import mkdir -p ~/.gnupg echo "pinentry-mode loopback" > ~/.gnupg/gpg.conf echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf gpg-connect-agent reloadagent /bye
这样GPG会从标准输入获取密码,不需要终端交互。
方案3:用插件内置的非交互式配置
直接在plugin配置里开启pinentryMode为loopback,无需修改gpg.conf:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-gpg-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>sign-artifacts</id> <phase>verify</phase> <goals> <goal>sign</goal> </goals> </execution> </executions> <configuration> <pinentryMode>loopback</pinentryMode> <passphrase>${gpg.passphrase}</passphrase> </configuration> </plugin>
同时在Actions的环境变量里加上:
env: GPG_TTY: /dev/pts/0
内容的提问来源于stack exchange,提问作者Hugo Bois
相关产品推荐
相关产品推荐

