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 管道工作完美,但最后一步。
我遵循了这些指南:
- http://www.scala-sbt.org/0.13/docs/Using-Sonatype.html
- http://www.scala-sbt.org/sbt-pgp/usage.html
- https://github.com/xerial/sbt-sonatype
在本地,我的所有步骤都运行良好并实际发布到 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
我已经构建了一个 OSS 项目 https://github.com/datlinq/scalafiniti Travis-ci 管道工作完美,但最后一步。
我遵循了这些指南:
- http://www.scala-sbt.org/0.13/docs/Using-Sonatype.html
- http://www.scala-sbt.org/sbt-pgp/usage.html
- https://github.com/xerial/sbt-sonatype
在本地,我的所有步骤都运行良好并实际发布到 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