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

时间:2013-04-13 19:16:53

标签: scala maven jenkins sbt cloudbees

我想使用CloudBees Jenkins服务来构建基于SBT的夜间快照 scala项目并将它们发布到Sonatype OSS Maven Repository。 SBT有 two ways为构建提供发布凭据;一个人有 凭证内联在.sbt文件中(未加密,natch),以及其他用途 外部属性文件的硬编码路径(遗憾的是,未加密)。

CloudBees有mechanism用于提供构建代理的配置文件, 但是我不想在我的build.sbt中硬编码到这个位置的路径,也不能 找到告诉SBT从命令行读取.sbt文件的任何方法。最接近的我 可能会来设置sbt.global.base system property,但不幸的是这个 失败,因为配置文件位置以只读方式挂载,SBT使用它 已编译的类文件的位置。

Damien Lecan came up with a clever way围绕这个问题运行预构建 将一组.sbt文件复制到构建执行程序的$HOME/.sbt目录的脚本。 我发现这个解决方案可以接受,但令人反感,因为它使构建依赖于 短暂的状态,并增加了另一个潜在的失败点。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

在我的构建中,我实际上是clean update "+ test" "+ publish",以确保环境清洁 并确保所有交叉编译的构建在其中任何一个之前通过他们的测试 转移到存储库。