running maven build on jenkins slave not working - maven

I am trying to setup a maven project in jenkins via freestyle option. I have set manage jenkins->configure system to set maven downlaod automatic. But, when I run the project on the slave where there is no maven isntall, it does not automatically download maven on slave and install as i expected. am i thinking something wrong here?
This is what I have done :
1. Manage jenkins-> configure system-> maven install automatically
2. create a new job and select freestyle project
3. in the build step:
scp pom file from master to slave machine
run maven from slave using this pom file
Here there is no maven installed in slave. But, i though because of step 1, it will automatically download maven on slave and install before running the build .

In your build step you need to "Invoke top-level Maven targets", select the Maven version you configured and trigger the job again.
if the installation you added is by extracting *zip and not from Apache you have a "Label" field that is co-related to the Label of the node you're running on. I always use Tools label on my slaves, so just make sure you have this label configured in the node itself.

Related

jenkins is not using local maven repository

I have few jars which I have installed in my local maven repo(in windows under user/.m2). While building the project from command-line it's perfectly downloading the jars and packaging it.
Now I have created a Jenkins job (mvn clean package) to do so, but while running the jobs it's not picking up those jars from local repo instead trying to download it from central repo.
I tried all possible solutions available in Internet but still no luck. Can you please how I can configure Jenkins so that it should download those jars from my local repo ?
I also tried :-
1. offline mode
2. gave local repo path in settings.xml
3. use of nexus/artifactory in not an option for me
Seems maven executed by Jenkins not used the settings.xml in your local
you can try to change the maven command/goal in Jenkins job configuration with one more option:
-f <your local settings.xml path>
you can copy the settings.xml to your source code folder for debug purpose, after prove it work, then consider how to prepare the settings.xml for jenkins job with below options:
Option 1 use Config file provider plugin
Click Config Files -> Add a New Config -> Maven settings.xml
Change name and set your xml into content field:
In your job configuration, click the Advance... button in Build Section, choose your added settings.xml as below:

Configure Maven installation in Jenkins per individual job

Is there a way to configure Jenkins to use specific Maven installation per job?
e.g.
Job A - Maven 3.3.3
Job B - Maven 3.3.9
Jenkins allows you to select which Maven installation to use per job. You can setup multiple installations of Maven, multiple settings configurations of Maven to be exact, through Manage Jenkins → Configure System.
Then to configure per job, in Jenkins, select your specific build job and choose Configure. From there, assuming it is a Maven project build, you should have option(s) under the Build section (might have to hit the Advanced button) where you can select the Maven settings for your installation you want.
khmarbaise's comment is very valid, though. Unless you have a very specific reason to downgrade Maven for a given job, your build shouldn't be too reliant on what minor versions of the build tool to use.
For newer Jenkins versions, management of Maven installations is placed here:
Manage Jenkins → Global Tool Configuration → section Maven.
Per job configuration: "Maven Version" dropdown placed in "Build" section.

Deploy latest build from repository to tomcat

What I want to achieve is two step build automation
Step A - Build & Upload to artifact repo
Create build job in Jenkins which will create build after every check-in
Upload every successful build on Archiva server
Step B - Get latest artifact & deploy on required servers
After every desired interval, get latest build from Archiva
Deploy build uploaded in Step A.2 to dev/qa/stg server by unzipping its content in web server directory.
I was able to do achieve Step A by using maven goals in my project pom.xml but any idea/suggestions/best practices for Step B.
I understand/agree, I would need two different jobs having different pom.xml, question remains how will we get latest war from repo in pom and how will be deploy that latest war on remote server by unzipping it, as tomcat there does not have admin module.
I would deploy not a jar/war artifact on step 2, but would create a RPM that contains a needed files structure.
With maven it's quite easy to do with a maven rpm plugin
3-4. Nexus has built in YUM repository support, so you can use yum to install the latest rpm version
So I've always found it better to separate the builds and the deploys.
The schedule for those can be independently managed then.
Assuming you are using linux on the servers you could use the ssh-plugins in jenkins to download the artifact in archiva
wget http://server/repository/internal/group/artifact/version/artifact-version.jar
As for the deploy, you could sftp them over to the deploy server also using jenkins SFTP plugin.

What's the Maven Configuration for in Jenkins server?

In Jenkins's "Configure System", there is "Maven Configuration" where you can set the local installation of Maven. What's this for?
local installation means the local Maven installation on the Jenkins server, right? But most of time we build in Slaves.
Jirong
You can also use the Jenkins master only configuration, and it is an option for this situation :)
It works also for slaves, if path is identical as in master.
To configure different path on slaves go to Manage Jenkins -> Manage Nodes -> node name -> Configure.

Jenkins job in slave using maven - Maven home doesn't exist

I am experiencing an issue running Jenkins job using slaves.
The job is a Maven job, that updates code from svn and then build and run tests, this project runs well in both master and slave as a standalone project.
The issue is when Master launch this project in the slave, in that case I see:
...
Svn Update OK
Error: Maven Home c:\maven doesn't exist
Both servers have maven on that dir, and both servers are able to run the build without master/slave setup.
Finally,I solve this problem.
The reason of "Error: Maven Home c:\maven doesn´t exist" is that your slave node use the master`s maven setting . If the slave want to use its own setting , it has to override that.
Override the settings as follows:
System Management -> Node Management -> your slave setting -> Node Properties -> check the Tools Locations -> Add , then set the slave maven option,alias select "maven",directory write with the slave maven directory.
you can try it.
You need to invoke your top-level maven targets and set the goals and path to pom, for instance:
goals: clean install
Pom: /home/merbel/sth/pom.xml
Finally i solve this issue, it was very simple just we need to check the global configuration that in maven part we have given correct path or not as a maven home.
for example: in global tools configuration..>come down in maven home part
maven Name: M2_HOME
MAVEN_HOME: /opt/maven
like this we need to give correct path where maven was untar so after checking this try once.....
in most cases it works succesfully.....

Resources