2017-09-03 203 views
0

我已经构建了一个OSS项目https://github.com/datlinq/scalafiniti Travis-ci管道完美地工作,但最终完成了一步。sbt发布使用pgpPassphrase通过Travis CI在Sonatype Nexus上签名

我跟着这些指南:

本地我得到了做工精细的所有步骤,实际上发布到了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也被加密特拉维斯env和可用于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

回答

0

所以,它之所以提示一个密码并忽略所有基于sbt的配置是由于构建脚本使用本地gnupg安装而不是使用sbt-pgp(bouncy castle)打包的配置。 本地gpg希望你第一次手动输入密码。硬盘使用TravisCI

了一点,所以解决方案就是忽略本地GPG和使用捆绑的一个,使用了pgpPassphrase设置

回首文档:

在实际的第一行中有一行说:

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

使用GPG命令行工具的第一步是使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