# Nexus and chef

**URL:** <https://discourse.chef.io/t/nexus-and-chef/1847>\
**Category:** Chef Infra (archive)\
**Created:** [May 19, 2011, 7:22pm UTC](https://discourse.chef.io/t/nexus-and-chef/1847 "2011-05-19T19:22:59Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yvonne\_Lam](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.chef.io/yvonne_lam/32/356_2.png) [@Yvonne\_Lam](https://discourse.chef.io/u/Yvonne_Lam)\
**Post date:** [May 19, 2011, 7:22pm UTC](https://discourse.chef.io/t/nexus-and-chef/1847/1 "2011-05-19T19:22:59Z")

</div>

I asked a couple of people at the chef meetup in Seattle about this; they  
gave me some good ideas and suggested that I ask the mailing list for more,  
so… Does anyone have a nice way of using chef to deploy maven snapshots  
from nexus that they would be willing to share? At my job, we’ve extended  
the deploy resource to know how to use the nexus search functionality to  
find artifacts and download them. It works great, except that due to the  
nature of maven snapshots (\*), it downloads snapshots whether it needs to or  
not. Ideas so far:

1. Hit nexus, download thing-1.0-SNAPSHOT.war snapshot, compare it to the  
existing one. If they are the same, then tell the nexus/deploy resource  
somehow not to move the symlinks. Issue: I don’t know how to tell the  
deploy resource not to move the symlinks.
2. Give thing-1.0-SNAPSHOT.war a unique identifier (timestamp/build  
number/checksum) in a file in the target node’s filesystem. When the recipe  
next runs, scrape the nexus output to determine whether there is a new  
snapshot that needs to be downloaded. If there isn’t, don’t download  
anything, and gracefully exit the nexus/deploy resource. Issue: I don’t  
know how to make the graceful exit.
3. Add code to check nexus for new snapshots separately, and only run the  
nexus resource if there are changes. This is what I’m planning to implement  
for now. Issues: None really, except that (1) or (2) seem to me to be  
cleaner solutions if I could make them work.
4. Add a build step to jenkins to run the chef client and update nodes when  
a new snapshot is built. Issue: I don’t love the idea of adding an  
explicit dependency on jenkins, although I suppose I could be convinced  
otherwise.

In case it matters, we’re using nexus 1.5 open source, for which API  
documentation seems to be not quite available.

Yvonne

(\*) Basically, thing-1.0-SNAPSHOT.war refers to the most recent of  
thing-.war, thing-.war,…,thing-.war.

---

<div class="post-metadata">

**Author:** ![Upayavira](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.chef.io/upayavira/32/827_2.png) [@Upayavira](https://discourse.chef.io/u/Upayavira)\
**Post date:** [May 19, 2011, 7:46pm UTC](https://discourse.chef.io/t/nexus-and-chef/1847/2 "2011-05-19T19:46:55Z")

</div>

Can’t you do a HEAD request on the resource, and look for a last  
modified timestamp header to see if it has changed?

Upayavira

On Thu, 19 May 2011 12:22 -0700, "Yvonne Lam"  
[yvonne.z.lam@gmail.com](mailto:yvonne.z.lam@gmail.com) wrote:

I asked a couple of people at the chef meetup in Seattle about  
this; they gave me some good ideas and suggested that I ask  
the mailing list for more, so… Does anyone have a nice way  
of using chef to deploy maven snapshots from nexus that they  
would be willing to share? At my job, we’ve extended the  
deploy resource to know how to use the nexus search  
functionality to find artifacts and download them. It works  
great, except that due to the nature of maven snapshots (\*),  
it downloads snapshots whether it needs to or not. Ideas so  
far:

1. Hit nexus, download thing-1.0-SNAPSHOT.war snapshot, compare  
it to the existing one. If they are the same, then tell the  
nexus/deploy resource somehow not to move the symlinks. Issue:  
I don’t know how to tell the deploy resource not to move the  
symlinks.

2. Give thing-1.0-SNAPSHOT.war a unique identifier  
(timestamp/build number/checksum) in a file in the target node’s  
filesystem. When the recipe next runs, scrape the nexus output  
to determine whether there is a new snapshot that needs to be  
downloaded. If there isn’t, don’t download anything, and  
gracefully exit the nexus/deploy resource. Issue: I don’t know  
how to make the graceful exit.

3. Add code to check nexus for new snapshots separately, and  
only run the nexus resource if there are changes. This is what  
I’m planning to implement for now. Issues: None really, except  
that (1) or (2) seem to me to be cleaner solutions if I could  
make them work.

4. Add a build step to jenkins to run the chef client and update  
nodes when a new snapshot is built. Issue: I don’t love the  
idea of adding an explicit dependency on jenkins, although I  
suppose I could be convinced otherwise.

In case it matters, we’re using nexus 1.5 open source, for which  
API documentation seems to be not quite available.

Yvonne

(\*) Basically, thing-1.0-SNAPSHOT.war refers to the most recent  
of thing-.war,  
thing-.war,…,thing-.war.

---

<div class="post-metadata">

**Author:** ![Edward\_Sargisson](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.chef.io/edward_sargisson/32/570_2.png) [@Edward\_Sargisson](https://discourse.chef.io/u/Edward_Sargisson)\
**Post date:** [May 31, 2011, 12:17am UTC](https://discourse.chef.io/t/nexus-and-chef/1847/3 "2011-05-31T00:17:10Z")

</div>

Just came across this (yes, I'm way behind on my mail).

I haven't implemented this but I have a similar problem. My plan was  
to have the build update a databag with the build id after a  
successful build. Each node would store its current build id as node  
data. Every chef run would compare the id in the databag with the id  
in the node data and then do a deploy.

Note, this isn't exactly for maven but I think the idea may work for  
maven. In my case I'm uploading my build artifacts to S3 with a unique  
folder for each build id. When I've got a successful build then I want  
to push it into the relevant environment.

Cheers,  
Edward

On Thu, May 19, 2011 at 12:22 PM, Yvonne Lam [yvonne.z.lam@gmail.com](mailto:yvonne.z.lam@gmail.com) wrote:

> I asked a couple of people at the chef meetup in Seattle about this; they  
> gave me some good ideas and suggested that I ask the mailing list for more,  
> so... Does anyone have a nice way of using chef to deploy maven snapshots  
> from nexus that they would be willing to share? At my job, we've extended  
> the deploy resource to know how to use the nexus search functionality to  
> find artifacts and download them. It works great, except that due to the  
> nature of maven snapshots (\*), it downloads snapshots whether it needs to or  
> not. Ideas so far:
> 
> 1. Hit nexus, download thing-1.0-SNAPSHOT.war snapshot, compare it to the  
> existing one. If they are the same, then tell the nexus/deploy resource  
> somehow not to move the symlinks. Issue: I don't know how to tell the  
> deploy resource not to move the symlinks.
> 2. Give thing-1.0-SNAPSHOT.war a unique identifier (timestamp/build  
> number/checksum) in a file in the target node's filesystem. When the recipe  
> next runs, scrape the nexus output to determine whether there is a new  
> snapshot that needs to be downloaded. If there isn't, don't download  
> anything, and gracefully exit the nexus/deploy resource. Issue: I don't  
> know how to make the graceful exit.
> 3. Add code to check nexus for new snapshots separately, and only run the  
> nexus resource if there are changes. This is what I'm planning to implement  
> for now. Issues: None really, except that (1) or (2) seem to me to be  
> cleaner solutions if I could make them work.
> 4. Add a build step to jenkins to run the chef client and update nodes when  
> a new snapshot is built. Issue: I don't love the idea of adding an  
> explicit dependency on jenkins, although I suppose I could be convinced  
> otherwise.  
> In case it matters, we're using nexus 1.5 open source, for which API  
> documentation seems to be not quite available.  
> Yvonne  
> (\*) Basically, thing-1.0-SNAPSHOT.war refers to the most recent of  
> thing-.war, thing-.war,...,thing-.war.
