sbt publishSigned 通过 Travis CI 在 Sonatype Nexus 上使用 pgpPassphrase

sbt publishSigned on Sonatype Nexus via Travis CI with using pgpPassphrase

我已经构建了一个 OSS 项目 https://github.com/datlinq/scalafiniti Travis-ci 管道工作完美,但最后一步。

我遵循了这些指南:

在本地,我的所有步骤都运行良好并实际发布到 Nexus。

.travis.yml 我在安装前导入密钥(在 travis.ci env 中加密)

before_install:
 - echo "$PGP_SECRET" | base64 --decode | gpg --import
 - echo "$PGP_TRUST" | base64 --decode | gpg --import-ownertrust

$PGP_PASS 也在 Travis env 中加密,可用于 build.sbt

我检查过它实际上获取了这个命令中的密钥

pgpPassphrase := sys.env.get("PGP_PASS").map(_.toArray)

现在如果 Travis 运行命令

sbt publishSigned

它仍然提示输入我的密钥的密码

You need a passphrase to unlock the secret key for user: "com.datlinq.datalabs (Key for Datalabs OSS) " 2048-bit RSA key, ID 305DA15D, created 2017-09-01

Enter passphrase:

我不知道我应该怎么做才能完成这项工作

捕捉到这个时刻:

代码: https://github.com/datlinq/scalafiniti/tree/0d8a6a92bf111bae2a1081b17005a649f8fd00c9 构建日志: https://travis-ci.org/datlinq/scalafiniti/builds/271328874

因此,它提示输入密码并忽略所有基于 sbt 的配置的原因是构建脚本使用本地 gnupg 安装而不是与 sbt-pgp(充气城堡)打包的那个。 本地 gpg 希望您第一次手动输入密码。使用 TravisCI 有点困难

所以解决方案是忽略本地 gpg 并使用捆绑的 gpg,它使用 pgpPassphrase 设置

回顾文档:

在第一行中,它实际上是这样说的:

If you’re using the built-in Bouncy Castle PGP implementation, skip this step.

The first step towards using the GPG command line tool is to make sbt-pgp gpg->aware.

useGpg := true

所以解决方案是设置 useGpg := false

有关更多详细信息,请查看当前存储库: https://github.com/datlinq/scalafiniti

或查看此博客(我后来找到的)https://alexn.org/blog/2017/08/16/automatic-releases-sbt-travis.html