0

First of all, I apologize for the lengthy title -- by all means change it if you can think of a briefer one.

We use Jenkins for CI. The app is written in Java, built with Maven (invoked manually in local dev environments and by Jenkins), deployed on various Tomcat servers. Nothing unusual about the application stack. Version control is SVN for the time being (we're looking at Git and I hope that comes soon).

We have a multi-phase Jenkins job called something like build.all which does svn update using the Maven plugin and then runs mvn clean install from the root dir where the code is checked out by svn. Then, another set of jobs deploys the artifacts made by build.all using deploy plugin by sending them over to the target servers using a Tomcat manager web service. The deploy jobs specify the latest successful build of build.all as the source of artifacts to deploy.

That works great when we are in a single branch mode. The hard setting of build.all as the source of artifacts to deploy is what is giving me headaches while trying to support transition periods during which some environments receive deployments from branch X and some from branch Y.

Without belaboring you with the minutiae of random low level tactics I'm speculating might make this possible -- can you recommend a high level strategy to support parallel artifact builds from different versioning branches? One goal is to not have to change the job source of artifacts to deploy because there is a rather large number of jobs that do deployments and changing them all by hand would be prohibitively labor intensive. For example, is there a way to maintain a key lookup mapping environments with source branches (or references thereof) so if a deployment job starts with STAGE or UAT, Jenkins looks up which build job (specific to a branch) is mapped to that environment?

0

You can create a release process to manage deployments in your environments. A plugin that can help you is the maven-release-plugin, where you 'freeze' the package and can promote them between environments (DEV -> UAT -> PROD). This ensures that the artifact (package) is exactly the same as the Production environment.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.