これが私がやることに決めたものです:
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>
これは2つのことを行います:
- 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
わかりません。ただし、現時点では実際には何の影響もありません。
現在、開発者は、ダウンロードしたすべてのjarを含む単一のIvyキャッシュを持っています。このようにして、jarをプロジェクト間で共有できるため、開発者の作業がスピードアップします。
一方、Jenkinsは、設定されている回数だけIvyキャッシュをクリーンアップできます。これは、ジョブごとに、または1日1回、または1か月に1回実行できます。ただし、キャッシュはエグゼキュータごとに実行されるため、別のジョブ(別のエグゼキュータで実行される)がそのキャッシュに依存しているときにキャッシュがクリーンアップされるという問題は発生しません。
これにより、特定の問題がすべて解決されるはずです。私がやりたいのは、デフォルトの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>