Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I configure Jenkins not to deploy to Maven repository unless I am performing a release build?

I have configured a Jenkins job to build a Maven 3 project and with the "Maven release build" plugin enabled and also added a post-build action to deploy the artifacts to a Nexus repository.

However, I don't want artifacts to be deployed unless the user had initiated the build by clicking the "Perform Maven Release" link instead of the "Build Now" button. When the click "Build Now" I just want a snapshot build that doesn't get deployed anywhere.

I understood from the documentation that I could use a environment variable called IS_M2RELEASEBUILD to control this behavior. This environment variable is set to true by the M2 Release Plugin when the build was initiated via the "Perform Maven release" link. But the post build action is completely ignoring this.

Jenkins Settings

I am using Jenkins LTS 1.509.3 and Maven 3.0.5.

UPDATE: Please note that I am not looking for a workaround using using the Maven Release Plugin within the POM. My goal is to create a single Jenkins job that acts as the CI build (without deploying the snapshot) triggered by check-ins and to be able to use the same job to perform a release build using the Jenkins M2 Release plugin.

like image 512
Brian Matthews Avatar asked Sep 27 '13 16:09

Brian Matthews


People also ask

Why does Jenkins require Maven?

A maven is a build tool designed to manage dependencies and the software lifecycle. It is also designed to work with plugins that allow users to add other tasks to the standard compile, test, package, install, deploy tasks. Jenkins is designed for the purpose of implementing Continuous Integration (CI).

Is it compulsory to have a plug in like Maven to be pre installed on the machine for Jenkins to be able to use it?

The Maven Plugin is a plugin that provides the capabilities to configure, build, and run Maven-based projects in Jenkins. This is a must pre-requisite for the integration of Maven with Jenkins.

How does Jenkins git integrate with Maven?

Go to Dashboard > Manage Jenkins > Manage Plugins > Available and search for Maven, as shown below: On the next page, along with Maven Integration and Maven Invoker, you will see some additional dependencies getting installed, which are required for both plugins to work.


2 Answers

Take a look on Flexible Publish Plugin:

I think you can easily check your environment variable against required pattern

enter image description here

and trigger proper post build action (sorry, do not have deploy to maven)

enter image description here

like image 117
Renat Gilmanov Avatar answered Sep 18 '22 14:09

Renat Gilmanov


If you add the deploy action to the maven release goals then you don't need a separate step in the Jenkins job. These goals are only executed on release:perform. Something like:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-release-plugin</artifactId>
  <configuration>
    <goals>deploy</goals>
  </configuration>
</plugin>

Peter Schuetze answered this in the comments and should probably post this answer to get the bounty.

like image 29
Zac Thompson Avatar answered Sep 22 '22 14:09

Zac Thompson