在 Jenkins 中使 SBT 缓存的工件本地化到工作区

Posted

技术标签:

【中文标题】在 Jenkins 中使 SBT 缓存的工件本地化到工作区【英文标题】:Making the SBT cached artifacts local to the workspace in Jenkins 【发布时间】:2018-11-23 19:40:09 【问题描述】:

有没有办法(比如使用 Jenkins maven 插件)来设置 .ivy2/cache 目录 在 Jenkins 的 sbt 工作的工作区本地?动机是每次都能够执行“干净”的构建。 如果没有,是否有其他方法可以验证所有 sbt 依赖项是否在构建期间从外部存储库解析,而不是从本地缓存解析?

【问题讨论】:

【参考方案1】:

要更改默认的 ivy 主页,请查看此SO post。 另一种可能的解决方案是在 Build using sbt 之前添加 Execute Shell 步骤:

rm -rf ~/.ivy2/cache

【讨论】:

所以我猜目前 sbt 插件本身没有内置任何东西。覆盖默认的 .ivy2/cache 位置作为系统属性似乎是个好主意。 'rm -rf ~/.ivy2/cache' 会破坏并行作业,所以它不是解决方案。 我同意,覆盖更干净。在覆盖默认缓存位置时,可能会重用 Jenkins 环境变量 'WORKSPACE'、'BUILD_NUMBER' 的组合。不要忘记清理缓存目录,以免它们堆积起来。 根据我检查的内容(使用 sbt 1.0.4),-Divy.home 属性对 sbt 没有影响,只有 -Dsbt.ivy.home 定义了所有下载工件的 .ivy 位置包括 sbt 和 scala lang 本身。很遗憾,每次 CI 作业触发并清理工作空间时,我都必须下载所有这些繁重的依赖项。

以上是关于在 Jenkins 中使 SBT 缓存的工件本地化到工作区的主要内容,如果未能解决你的问题,请参考以下文章

本地工件代理背后的 sbt

如何让 sbt 使用本地 Maven 代理存储库(Nexus)?

阻止 Jenkins 将工件安装到本地 Maven 存储库

如何删除 maven 获取的缓存本地工件?

SBT 原生打包程序:在 %install 中解压缩工件

SBT 如何为特定的 groupid 禁用 Ivy 缓存