1

I want some "Maven with Mercurial release" knowledgeable opinion.

I already saw this thread and a few others.

We want to be agile and fast. We want to build once. Not one build for testing and one for release.

We have setup a continuous release process where we do the following:

  1. Jenkins checks for SCM changes on "server" repository (every 30 minutes). Also can be triggered manually
  2. Jenkins clones "server" repository
  3. Jenkins increments version in pom (example: 1.0.1 -> 1.0.2). NO Snapshots
  4. Start build, package, automatic deployments and tests
  5. If all is good, commit changed pom, tag and push back to "server" repository (merge if needed)
  6. Release good version to a "releases" system, where it's available for QA for further testing
  7. Developers will pull back changes from "server" repository and get new versiond poms

If a hot fix is needed for a good release

  • A developer will clone the relevant tag from "server" repository
  • Do the fix, push back to a "server+fix" repository
  • Jenkins will build as before
  • If good, the fix will also be pushed to the main "server" repository

We found this process to be very quick and clean.

I want your opinion on the flow, with ideas to improve. Remember - Fast, Continuous and Build once.

Thanks in advance!

Community
  • 1
  • 1
Eldad Assis
  • 10,464
  • 11
  • 52
  • 78

1 Answers1

1

+1 to the no snapshots rule. I think its all good.

Release good version to a "releases" system, where it's available for QA for further testing

What is the "releases" system. Is it a maven repository? Does a new build automatically get deployed to the QA environment? How does it pull from the respository? You could pull a jar from a maven repo using dependency:get. But if want to make use of infrastructure automation tools like Chef or Puppet for your deployment side, you'd be better off publishing rpms to your maven repository (publish using the maven-rpm-plugin and enable pulls with the nexus-yum-plugin for example) or simply setting up your own yum repository.

ottodidakt
  • 3,631
  • 4
  • 28
  • 34
  • The "releases" system is a file system based repository with a managed web access. The build will automatically deploy to an initial test system. Later, we allow QA to use Jenkins to select a version that's released and have it automatically installed. The released artifacts are RPMs. – Eldad Assis Jan 18 '13 at 11:46