这是我决定做的事情:
我已修改我的ivysettings.xml
文件以具有以下内容:
<ivysettings>
<properties environment="env." override="false"/>
<caches
defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>
<settings defaultResolver="default"/>
<include file="${ivy.dir}/ivysettings-public.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>
这做了两件事:
- 它将 Ivy 本地缓存定义为Jenkins 执行程序的
$HOME/.ivy/cache-$EXECUTOR_NUMBER
位置。$EXECUTOR_NUMBER
这意味着每个执行器都有自己的 Ivy 缓存。因此,如果 Jenkins 一次执行多个作业,则每个作业将由不同的执行器拾取,因此它将有自己的缓存。如果一个作业想要清理缓存,它可以直接进行。
- 我已将解析缓存定义为
${basedir}/target/ivy.cache
. 这为每个作业提供了自己的解析器缓存,该缓存非常小。但是,如果 Jenkins 正在构建同一个 Ivy 项目的多个修订版,则这种方式 ivy 解析不会干扰其他工作。
唯一的缺点是调用了用户的默认缓存目录,$HOME/.ivy/cache-$env.EXECUTOR_NUMBER
这不是一个漂亮的站点。我想让它更合理$HOME/.ivy/cache-0
,但我还没有弄清楚。但是,它在这一点上并没有真正影响任何事情。
现在,开发人员拥有一个 Ivy 缓存,其中包含他们下载的所有 jar。这样,可以在项目之间共享 jar,从而加快开发人员的速度。
同时,Jenkins 可以按照配置的频率清理 Ivy 缓存。这可以针对每项工作进行,或者每天或每月一次。但是,由于缓存是按执行程序完成的,因此当另一个作业(将在另一个执行程序上运行)取决于该缓存时,我不会遇到缓存被清理的问题。
这应该解决所有特定问题。我唯一想做的就是弄清楚如何设置一个默认的 EXECUTOR_NUMBER 变量(如果尚未设置)。我已经尝试过这样的各种事情:
<ivysettings>
<property name="env.EXECUTOR_NUMBER" value="0" override="false"/>
<properties environment="env." override="false"/>
<caches
defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>
<settings defaultResolver="default"/>
<include file="${ivy.dir}/ivysettings-public.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>
但是,无济于事。我确实以不同的方式更改了和文件override
上的参数,但它并没有完全达到我想要的效果。<property>
<properties>