在 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 缓存的工件本地化到工作区的主要内容,如果未能解决你的问题,请参考以下文章