GitHub Actions部署Java库至OSSRH时GPG签名失败问题解决
解决GitHub Actions部署时GPG签名失败的问题
这个错误的核心原因是GitHub Actions运行在非交互式环境中,GPG无法弹出口令输入窗口,而本地是交互式环境所以能正常操作。以下是具体解决步骤:
1. 准备并上传GPG密钥到GitHub Secrets
- 本地执行命令导出ASCII格式的GPG私钥:
gpg --export-secret-keys --armor 你的密钥ID > private-key.asc - 进入GitHub仓库的Settings → Secrets and variables → Actions,添加两个秘密变量:
GPG_PRIVATE_KEY:粘贴private-key.asc文件里的全部内容GPG_PASSPHRASE:你的GPG密钥口令
2. 修改GitHub Actions工作流文件(release.yml)
在工作流中添加导入GPG密钥的步骤,并配置非交互式签名:
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 配置JDK uses: actions/setup-java@v4 with: java-version: '17' # 替换成你的项目JDK版本 distribution: 'temurin' server-id: ossrh server-username: ${{ secrets.OSSRH_USERNAME }} server-password: ${{ secrets.OSSRH_TOKEN }} - name: 导入GPG密钥并配置非交互式模式 run: | echo "${{ secrets.GPG_PRIVATE_KEY }}" | gpg --batch --import mkdir -p ~/.gnupg echo "allow-loopback-pinentry" >> ~/.gnupg/gpg.conf echo "pinentry-mode loopback" >> ~/.gnupg/gpg.conf - name: 部署到OSSRH run: mvn clean deploy -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }} -DskipTests env: MAVEN_OPTS: "-Dgpg.pinentry-mode=loopback"
3. 检查pom.xml的GPG插件配置
确保maven-gpg-plugin开启了loopback模式,支持从参数读取口令:
<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>
4. 清理自定义settings.xml的冲突配置
如果之前添加了自定义settings.xml,确保里面没有硬编码的GPG口令或交互模式配置,避免和CI环境的设置冲突。
内容的提问来源于stack exchange,提问作者hajjoujti
相关产品推荐
相关产品推荐

