sbt publish使用pgpPassphrase通过Travis CI在Sonatype Nexus上签名

时间:2017-09-03 07:50:37

标签: sbt travis-ci gnupg pgp sonatype

我已经构建了一个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环境中加密,可用于build.sbt

我检查过它实际上得到了这个命令中的键

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

现在如果Travis运行命令

sbt publishSigned

它仍会提示输入密钥

的密码
  

您需要使用密码为用户解锁密钥:   " com.datlinq.datalabs(Datalabs OSS的关键)"   2048位RSA密钥,ID 305DA15D,创建于2017年9月1日

     

输入密码:

我不知道应该怎样做才能使这项工作

此时刻被捕获:

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

1 个答案:

答案 0 :(得分:0)

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

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

回顾文档:

在第一行中,它实际上说:

  

如果您正在使用内置的Bouncy Castle PGP实施,请跳过此步骤。

     

使用GPG命令行工具的第一步是使sbt-pgp gpg-> gt知道。

     

useGpg := true

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

有关详细信息,请查看当前的回购: https://github.com/datlinq/scalafiniti

或者查看此博客(我稍后会发现)https://alexn.org/blog/2017/08/16/automatic-releases-sbt-travis.html