http://mojo.codehaus.org/ship-maven-plugin

Let me know what you think?

-stephen

On 9 November 2010 09:24, Stephen Connolly
<stephen.alan.conno...@gmail.com>wrote:

> I think some of the issues are around missuse of Maven.
>
> Maven is a build tool, use it to do your build.
>
> CD needs a separate layer above Maven to do the deployment... now one
> could use maven plugins to provide that layer, but there are two
> issues I see:
>
> 1. the maven lifecycle does not include the phases you require
>
> 2. inbetween invokations of maven, we have no means to share state
>
> so lets say for #1 we add a phase of "ship"... we'd have the standard
> lifecycle something like
>
> validate -> ... -> compile -> ... -> test -> ... -> package -> ... ->
> verify -> install -> deploy -> ship
>
> that would allow us to bind our CD steps to the "ship" phase... ok, so
> people would have to get used to the fact that Maven uses "deploy" to
> mean "copy artifact to remote maven repo" and not the CD meaning of
> deploy... but people can "Just Get Over It(TM)"
>
> that allows any build to just go
>
> mvn clean ship
>
> and away we go... except that we would be dealing with -SNAPSHOTs...
>
> so to correct for that we would change the release goals using the
> release plugin to be "ship" in place of deploy... to gain speed (at
> the expense of better tested releases), we could even modify the
> preparation goals using the release plugin to be just "clean validate"
> and not "clean verify"
>
> then
>
> mvn release:prepare
>
> would be quick
>
> mvn release:perform
>
> would do the CD
>
> Hmmmm... most of this is actually fine for CD, and we don't even
> really need the "ship" phase as we could just bind to the deploy phase
> using the release profile to ensure that it only takes place during a
> release...
>
> The down side is we have no way to roll-back easily....
>
> e.g. we've just released 2.1.5652 but we have egg on our face due to
> an automated QA test that is giving a false pass... we have no way to
> revert back to 2.1.5651 except:
>  A. to revert the commits and roll a new release
>  B. put in the 2.1.5651 artifact by hand
>
> we can check-out the tag for 2.1.5651 and run "mvn ship -DskipTests"
> or "mvn deploy -Prelease -DskipTests" depending on whether we actually
> got the "ship" phase into the standard lifecycle or whether we just
> used the release profile to bind to the deploy phase.... but at the
> end of the day, that would be rebuilding the binaries... which (with a
> strict QA hat on) invalidates testing...
>
> I think what you need to do is have a maven-ship-plugin or a
> ship-maven-plugin that works a little like this:
>
> it takes a parameter shipVersion which by default evaluates the
> property shipVersion, but if that property is not defines then
> defaults to ${project.version}
>
> The m-s-p then resolves the shipVersion of the project artifact and
> passes that file onto a ship script...
>
> so if I have a war project foo:bar:1.0-SNAPSHOT:war
>
> mvn ship:ship -DshipVersion=1.0.56
>
> will redeploy the old version 1.0.56
>
> mvn package ship:ship
>
> will build the current source code and ship that
>
> mvn ship:ship
>
> will resolve the latest 1.0-SNAPSHOT from the local/remote repos and ship
> that
>
> we could add a parameter allowSnapshots that will default to false in
> order to prevent accidental deployment of non-releases
>
> and if you are doing CD you can bind ship:ship to the deploy phase in
> your release profile.
>
> I think I'll knock something together @mojo to help with this
>
> On 8 November 2010 19:20, stug23 <pat.poden...@gmail.com> wrote:
> >
> > We need to figure out how to best leverage Maven (keeping in mind its
> process
> > and practices) in a Continuous Delivery solution. I like the conversation
> > around this topic and also see that there is this other discussion about
> the
> > meaning of CD versus CI.
> >
> > From the comments so far, there has been a fair amount of discussion
> about
> > how to use SNAPSHOTs as if they were something that they aren't. Namely
> > retaining SNAPSHOTs all the way through release, possibly mutating the
> > metadata to make the builds products look like released artifacts instead
> of
> > SNAPSHOTs without having to rebuild the binaries. Since a SNAPSHOT works
> > well for a "work in progress" and not for a "thing I want to keep", maybe
> a
> > different approach would work better.
> >
> > Maybe it would make more sense to just burn lots of version numbers (e.g,
> > 3.5.1099) and always release with a new yet-to-be-defined Maven release
> > plugin that reflects the processes involved with CD. If the concern is
> disk
> > usage or inefficiency, perhaps some automation can make this more
> > manageable?
> >
> > I would be interested in inputs on this topic from the Maven founders if
> > they are following this thread.
> > --
> > View this message in context:
> http://maven.40175.n5.nabble.com/Continuous-Delivery-and-Maven-tp3245370p3255592.html
> > Sent from the Maven - Users mailing list archive at Nabble.com.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
> > For additional commands, e-mail: users-h...@maven.apache.org
> >
> >
>

Reply via email to