這裏就是我決定做的事:
我修改我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>
這不兩兩件事:
- 它定義了常春藤本地緩存爲
$HOME/.ivy/cache-$EXECUTOR_NUMBER
其中$EXECUTOR_NUMBER
是Jenkins執行者。這意味着每個執行者都有自己的Ivy緩存。因此,如果Jenkins一次執行多個作業,每個作業都將被另一個執行者選中,因此它將擁有自己的緩存。如果某個工作想要清理緩存,它可以繼續前進。
- 我已將解析緩存定義爲
${basedir}/target/ivy.cache
。這爲每個作業提供了自己的解析器緩存,它非常小。但是,如果Jenkins正在構建同一Ivy項目的多個修訂版,常春藤解決方案不會干擾其他工作。
唯一的缺點是用戶的默認緩存目錄被稱爲$HOME/.ivy/cache-$env.EXECUTOR_NUMBER
這不是一個漂亮的網站。我很樂意讓它更合理$HOME/.ivy/cache-0
,但我還沒有想出來。但是,在這一點上它並不影響任何事情。
現在,開發人員擁有一個包含所有已下載的jar的單個Ivy緩存。這樣,可以在各個項目之間共享jar,從而加速開發人員的工作。
與此同時,Jenkins可以像配置一樣經常清理常青藤緩存。這可以針對每項工作完成,或者每天或每月進行一次。但是,由於緩存是按執行程序完成的,因此我將不會遇到正在清理緩存的問題,而另一個作業(將在另一個執行程序上運行)取決於該緩存。
這應該解決所有的特定問題。我想要做的唯一事情是弄清楚如何設置一個默認的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>
但是,無濟於事。我已經修改了<property>
和<properties>
文件中的override
參數所有不同的方法,但它並不完全符合我的要求。
謝謝。清理緩存只會增加大約90秒的時間(我們有一個本地公司的Maven倉庫)。它不會影響_CI_概念,所以它不會真正傷害Jenkins開始每個構建w /一個乾淨的緩存。開發人員可以通過將ivy.cleancache設置爲false來關閉。具有諷刺意味的是,緩存清理會刺激開發人員,因爲它會延長構建時間,但不會影響構建。詹金斯不在乎,但如果詹金斯正在執行多項工作,這可能是一個問題。 –