Quantcast

Jenkins and Ivy

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Jenkins and Ivy

Qazwart-2
We have a lot of Ant projects and in order to get the dependencies in
order, I'm going to implement Ivy with Ant.

After getting some basic configuration setups, I'm beginning to
realize that there might be an issue with Jenkins doing multiple
builds with various Ivy projects.

For example, I thought originally it would be a good idea to do a
<ivy:cleancache> as part of the clean target. I suddenly realized that
this removes the entire user's cache. Imagine Job #1 running, and Job
#2 starts and does an <ivy:cleancache>. Suddenly Job #1 doesn't have
the cache.

I was also looking at the <ivy:resolve> and <ivy:cachepath> and may
have some concurrency issues with those too. When I look at
$HOME/.ivy/cache, I see files with the names of
"com.company.project-compile.xml" and "com.company.project-test.xml".
I assume that Ivy uses these for building the <cachepath> and
<cachefileset> reference IDs. What happens if I have two projects that
share the same company and project name? This is possible if you're
building two different versions of the same project. Imagine Company
VeggieCorp.com has a project "foo" and is working on the next release
3.5 and is working on a bugfix for the last release 3.4.2. There would
be a single "com-veggiecorp.foo-compile.xml" in the Ivy cache for both
of these projects.

How does everyone else use Ivy and avoid these issues? Or, am I
imagining this is a problem?

I was thinking somehow to include the Jenkins Executor Number to
eliminate this conflict. I might end up with multiple local
repositories, but it would eliminate the concurrency issue. If I
somehow incorporate the Executor Number as part of the ivy repository
location, then if Executor #1 is running and does an <ivy:cleancache>,
it won't affect any other job that might be currently running.

--
David Weintraub
[hidden email]
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Jenkins and Ivy

Frank Mundt
I'm using the Jenkins workspace to control the ivy cache folder. In the ivysettings.xml:

<caches defaultCacheDir="${env.WORKSPACE}/.ivy2" />

Since the project name is part of the workspace, you will be ok. 

As to your other questions on the cachepath and cachefileset these are specific to each project build execution. You won't have any concurrency issues with these.

Frank

On Wednesday, August 22, 2012 1:12:28 PM UTC-5, qazwart wrote:
We have a lot of Ant projects and in order to get the dependencies in
order, I'm going to implement Ivy with Ant.

After getting some basic configuration setups, I'm beginning to
realize that there might be an issue with Jenkins doing multiple
builds with various Ivy projects.

For example, I thought originally it would be a good idea to do a
<ivy:cleancache> as part of the clean target. I suddenly realized that
this removes the entire user's cache. Imagine Job #1 running, and Job
#2 starts and does an <ivy:cleancache>. Suddenly Job #1 doesn't have
the cache.

I was also looking at the <ivy:resolve> and <ivy:cachepath> and may
have some concurrency issues with those too. When I look at
$HOME/.ivy/cache, I see files with the names of
"com.company.project-compile.xml" and "com.company.project-test.xml".
I assume that Ivy uses these for building the <cachepath> and
<cachefileset> reference IDs. What happens if I have two projects that
share the same company and project name? This is possible if you're
building two different versions of the same project. Imagine Company
VeggieCorp.com has a project "foo" and is working on the next release
3.5 and is working on a bugfix for the last release 3.4.2. There would
be a single "com-veggiecorp.foo-compile.xml" in the Ivy cache for both
of these projects.

How does everyone else use Ivy and avoid these issues? Or, am I
imagining this is a problem?

I was thinking somehow to include the Jenkins Executor Number to
eliminate this conflict. I might end up with multiple local
repositories, but it would eliminate the concurrency issue. If I
somehow incorporate the Executor Number as part of the ivy repository
location, then if Executor #1 is running and does an <ivy:cleancache>,
it won't affect any other job that might be currently running.

--
David Weintraub
<a href="javascript:" target="_blank" gdf-obfuscated-mailto="_-DyCdtFgjoJ">qaz...@...
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Jenkins and Ivy

Ales Nosek
In reply to this post by Qazwart-2
Yes, I use the approach you mentioned, it works perfectly. The ivysettings.xml snippet:

<properties environment="env" />
<caches
  defaultCacheDir="${ivy.cache.dir}-${env.EXECUTOR_NUMBER}"
  ivyPattern="${default.ivy.pattern}"
  artifactPattern="${default.artifact.pattern}" />


On Wed, Aug 22, 2012 at 8:12 PM, David Weintraub <[hidden email]> wrote:

I was thinking somehow to include the Jenkins Executor Number to
eliminate this conflict. I might end up with multiple local
repositories, but it would eliminate the concurrency issue. If I
somehow incorporate the Executor Number as part of the ivy repository
location, then if Executor #1 is running and does an <ivy:cleancache>,
it won't affect any other job that might be currently running.

--
David Weintraub
[hidden email]

Loading...