2

我想使用 CloudBees Jenkins 服务来构建基于 SBT 的 scala 项目的夜间快照,并将它们发布到 Sonatype OSS Maven 存储库。SBT 有 两种方式为构建提供发布凭证;一个在 .sbt 文件中内嵌凭据(未加密,natch),另一个使用外部属性文件的硬编码路径(遗憾的是,仍然未加密)。

CloudBees 有一种提供配置文件来构建代理的机制,但我不想在我的 中硬编码此位置的路径build.sbt,也找不到任何方法告诉 SBT.sbt从命令行读取文件。我最接近的方法是设置sbt.global.base 系统属性,但不幸的是这失败了,因为配置文件的位置是只读的,而 SBT 使用这个位置来编译它的类文件。

Damien Lecan通过运行一个预构建脚本将一组文件复制到构建执行程序的目录中想出了一个巧妙的方法来解决这个问题。我发现这个解决方案可以接受但令人反感,因为它使构建依赖于临时状态并增加了另一个潜在的故障点。.sbt$HOME/.sbt

如何发布具有只读私有凭据的构建时访问权限的 SBT 项目?

4

1 回答 1

2

SBT 似乎没有任何方法可以将任意 .sbt 文件添加到构建中。但是,该 set命令允许用户在构建时修改设置,并且该命令可以像任何其他命令一样在命令行上使用。

这可以与Credentials对象可以接受File引用的事实相结合,以提供用于从私有挂载加载安全凭证的外部文件。

在 CloudBees 私有 WebDAV 存储库中,将凭证属性文件添加到您的首选位置(例如/private/sbt/.credentials)。在您的 Jenkins 作业配置中,将“使用 sbt 构建”部分中的“操作”字段设置为如下所示:

'set credentials += Credentials(file("/private/myproject/sbt/.credentials"))' publish

在我的构建中,我实际上是这样做clean update "+ test" "+ publish"的,以确保一个干净的环境,并确保所有交叉编译的构建在它们中的任何一个被传输到存储库之前都通过了它们的测试。

于 2013-04-13T19:16:53.230 回答