Jenkins - Run job when new slave connects - jenkins

I have a Jenkins installation uses SWARM to connect new slaves.
I bring up new instances in AWS and they use the SWARM Client to connect to the Jenkins master and register themselves as slaves.
Is it possible to have the Jenkins Master detect when a new slave is added and start to run some "init" job on that slave?
Thanks

We use the Slave Setup Plugin to mount a network drive and copy some files from the master whenever a slave connects.
If you want to run certain Jenkins jobs whenever a slave (or certain slave) connects, you could try the Startup Trigger Plugin.

There is the EC2 plugin which will spin up slaves on your behalf and run an init script on them for you.
Init script is the shell script to be run on the newly launched EC2
instance, before Jenkins starts launching a slave agent. If the AMI
doesn't have Java pre-installed, you can do this in the init script.
This is also a good place to install additional packages that you need
for your builds and tests. The init script is located at /tmp/init.sh
and is owned and run by the user account specified in the "Remote
User" field (so use of "sudo" may be required for non-root accounts).

Related

Can Jenkins Slave machine be configured for two different servers

Hello At work we have 2 Jenkins servers but at the moment we have limited slaves machines , I was asked to make a research if its possible to configure a slave machine for 2 different servers ?
so if I would use a machine as a slave I would do these steps:
1-Install Jenkins on the slave machine.
2-On the Jenkins master, go to "Manage Jenkins" and then click on "Manage Nodes".
3-Click on "New Node" to create a new slave node.
4-Give your slave node a name and select "Permanent Agent" as the type.
5-Click "OK" to create the slave node.
6-On the slave machine, open a terminal and navigate to the Jenkins home directory. This is typically located at /var/lib/jenkins on Linux machines.
7-java -jar slave.jar -jnlpUrl https://<Jenkins_URL>/computer/<Node_Name>/slave-agent.jnlp -secret <Node_Secret>
Replace <Jenkins_URL> with the URL of your Jenkins server, <Node_Name> with the name of your slave node, and <Node_Secret> with the secret that was generated for the slave node on the Jenkins master.
8-The slave agent should now be connected to the Jenkins master and ready to run build tasks.
why can't I do the same steps twice for two different servers , can you explain why it's not possible ?
It is possible but you have to configure them differently.
Both applications are same so windows/java by default thinks it as reconnection instead of new instance. Not sure but this can work by renaming your jnlp files.
Both the application needs to configure to use different IP to avoid connection error.

Jenkins: how to run an exe on a remote computer

I just started using Jenkins. Still not familiar with all its features.
I would like to run a Ranorex test which is on a remote computer. How can I do that from Jenkins?
To execute binaries on a specific host, you can use slaves.
Here is a guide to setup master and slave on windows:f
https://wiki.jenkins-ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines+on+Windows
You will run the slave on the remote computer and connect it to the master.
To run the slave on your remote computer, you have to download the slave.jar and start it on the remote computer. This is described in the wiki article above.
You have to ensure, that your job is executed on the slave. This can be done by labels. You configure a label on the slave and configure the same label on the job too.

Why Jenkins Slave need java to run slave.jar?

Via SSH slave plugin, we can have Jenkins slave to run specific job, but in my understanding, only SSH is enough to execute commands, why Jenkins still want to run slave.jar(Have to install JAVA)?
SSH is the communication mechanism between the master and slave machines.
The slave still has to run something to listen to the master and to do the actual builds. That Jenkins slave code is written in Java and stored in slave.jar.
So the reason you need Java on the slave machine is because the Jenkins slave software is written in Java. SSH is used by the master to tell the slave to do something.

How do I pass on my build file from Jenkins to Saltstack master

We have a Jenkins system to automate build from Github, now we are implementing a Saltstack system. So I need to integrate my Jenkins with Salt-master so that it passes all the new builds to the master which then sends it across the salt-clients(minions).
The saltstack setup is in AWS cloud and and the Jenkins machine is outside the cloud in a local setup.
You could enable the salt-api and using the following plugin: https://wiki.jenkins-ci.org/display/JENKINS/saltstack-plugin then all of your jenkins builds can execute states / orchestrations etc. to any minions on a per job basis.
Another way of doing this is to have a minion running on the salt-master and install the jenkins slave on the same box. Then restrict the jenkins jobs to that jenkins slave and execute the commands as if you were at the command line. NOTE: this option requires a bit more configuration.

Running HP Load Runeer or QTP from Jenkins

I have HP Load Runner installed in Windows 2012 and its hosted in the cloud.
For running load runner scripts, I connect to the system via mstcs, open the Virtual User Generator application and run the scripts.
Now I want to run the scripts via Jenkins( installed in a different system ) and I tried using the Jenkins HP Application Automation Tools plugin but I was unable to figure out how to do that.
In Jenkins I found out the following option:
Execute HP functional tests from HP ALM
Execute HP tests from file system
Execute HP tests using HP ALM Lab Management
Execute HP tests using HP Performance Center
But I am not sure how to use them or any of these will work. Can some please help me with this?
For individual scripts alone, mdrv command line. For controller alone wlrun command line. You may refer to knowledge base articles on the arguments to employ.
Have you gone through the documentation for HP automation plugin for Jenkins?
At last I figured out how to integrate it.
Integrating HP Load Runner:
For Running HP Load Runner scrips there is a Jenkins plugin named HP Application Automation Tools.
The challenge for us was the fact that Jenkins and Load Runner were installed on separate machines. We had Jenkins installed in our Dev server and HP Load Runner installed on cloud. If both were installed on the same machine then the task would be as simple as providing the filesystem path for Load Runner Scenario *.lrs files, in Execute HP tests from file system plugin.
So I went ahead and installed a slave instance of Jenkins in our CTC in which Load Runner was installed.
Steps to setup Jenkins slave instance.
On your master machine go to Manage Jenkins -> Manage Nodes.
New Node --> Enter Node Name.
Select Dumb Slave --> Press OK.
Fill out the following:
Set a number of executors (one or more) as needed.
Set a Remote FS Root, a home directory for the master on the slave machine. For a Windows slave, use something like: "C:\Jenkins\"
Set a label so that you can use that label to run jobs on the slave machine.
Select the appropriate Usage setting.
Launch Method: An easy way to control a Windows slave is by using Launch slave agents via Java Web Start (Recommended for Windows).
Availability --> Keep this slave online as much as possible
Press OK.
Now you need to connect your slave machine to the master using the following steps.
Open a browser on the slave machine and go to the Jenkins master server url (http: //your jenkins master:8080/).
Go to Manage Jenkins > Manage Nodes, Click on the newly created slave machine. You will need to login as someone that has the "Connect" Slave permission if you have configured global security.
Click on the Launch button to launch agent from browser on slave.
Run the program.
Now you should see the Slave machine connected under Nodes.
If you want the service to run on start-up of the slave machine do the following (Windows only directions):
In the Slave agent program running on your slave machine, click File --> Install as Windows Service.
Start, type Services and Select the Services program.
Find Jenkins Slave in the list, Double click to open.
Select Startup type --> Automatic.
Go to the Log On tab, change the Log on as to a user of your choice (Special user account Jenkins recommended).
Make sure that auto login is set for the slave machine for the user account, then the VM (or physical computer) should connect and be available when needed.
Creating Load Runner job in Jenkins:
Create a new freestyle project in Jenkins.
Check the "Restrict where this project can be run" checkbox and choose the Label Expression what you have provided for Slave Jenkins.
Under Add build step select Execute HP tests from file system and inside the Tests textarea provide the path of the folder of cloud machine which is having your Load Runner Scenario *.lrs scripts .
Click on build, Jenkins will trigger the Jenkins slave instance in cloud machine which will in turn invoke the Load Runner Controller and run the controller scripts(*.lrs).
Integrating HP QTP Scripts:
Steps for integrating HP QTP Scripts are exactly same as for HP Load Runner, the only difference is :
HP Unified Functional Testing should be installed in the same machine where you are going to configure Jenkins as a slave instance.
Under Add build step select Execute HP tests from file system and inside the Tests textarea provide the path of the folder of CTC machine which is having your HP QTP scripts .
Running Windows Server 2012 R2 Datacenter in a VM & want it set up as a jenkins node to run HP ALM test sets. In step 6, setting jenkins slave to run as a service, I received 'access denied' from jenkins slave agent process. Open a cmd prompt as admin user, cd to the jenkins slave install directory and enter
jenkins-slave.exe install
to fix this. Next, run services, locate the jenkins slave service. Should say 'Automatic', so 'start' it up and trial run your jenkins job. Check by rebooting the new jenkins slave platform and checking the service comes back as 'Automatic'.

Resources