MacOS Automator impact maven on Jenkins job - macos

We have macOS machine as a slave for Jenkins.
All code are executed on macOS machine.
After restarting macOS I have to reconnect slave manually.
So I created created a app with Automator and put it into lauch applications after login for my user.
Automator app is ash script like:
java -jar /selenium/slave.jar -jnlpUrl
http://1.2.3.4:4444/computer/macOS/slave-agent.jnlp -secret
0b149c641804f1424dsd998980sasd90asd8as73baa9f3f21c21e06d7681a6f6876ed
When I restart macOS the slave get up automatically,
BUT now I start getting build failures. Jenkins could not identify Maven anymore:
00:41:29 + mvn -v
00:41:29 /var/folders/88/6yf63sjn4r9_lzfld6m22fr80000gq/T/hudson5948404320742882477.sh: line 13: mvn: command not found
Looking forward for any comments on this.
Thanks.

Your shell script is excuted as different process which doesn't have all the correct environment properties setup.
You definitely need to add maven path to the PATH variable, and probably a bunch of others, into your script.
Example
export PATH=/usr/local/bin/mvn:$PATH
java -jar /selenium/slave.jar -jnlpUrl http://1.2.3.4:4444/computer/macOS/slave-agent.jnlp -secret 0b149c641804f1424dsd998980sasd90asd8as73baa9f3f21c21e06d7681a6f6876ed

Related

Run macOS Test Cases on the Jenkins Pipeline

Hi I have an macOS Application which needs to be configured for CI/CD purpose on the Jenkins.
I need to run the test cases before making the application available for the distribution or before creating a package file.
I am using the below mentioned command
xcodebuild -workspace xxx.xcworkspace -sdk macosx11.3 -scheme xxx -destination "platform=OS X,arch=x86_64" clean test
when I execute this command in the Jenkins it throws me an error
ERROR: The test runner encountered an error (Failed to establish communication with the test runner. If you believe this error represents a bug, please attach the result bundle at /Users/ec2-user/Library/Developer/Xcode/DerivedData/xxx-gkolnyonjdnyixfknefsjvbsyzia/Logs/Test/Run-xxx-2021.05.24_11-58-07-+0000.xcresult. (Underlying Error: Couldn’t communicate with a helper application. Try your operation again. If that fails, quit and relaunch the application and try again. The connection to service on pid 0 named com.apple.testmanagerd.control was invalidated.))
I need to make use of macOS itself to run as a simulator. As Jenkins runs as a Daemon on the ec-2 instance.
NOTE: NOT USING XCODE PLUGIN TO EXECUTE MY COMMANDS
Please help!!!
My MacOS system was a slave and I was running my scripts through the Linux server.
macOS was connected using the SSH earlier then this authentication method was required to be changed to access the UI of the Mac
Test cases running now
Based on observation, macOS Big Sur, Monterey, and probably subsequent versions no longer allow tests to be run through a SSH session. By changing the way Jenkins controller connects to the slave, you can prevent the command from being run through SSH.
The first way, Jenkins built-in, to do this and easiest is to use the JNLP method for agent communication. This will involve running a Jenkins agent on the slave machine that communicates with the Jenkins controller. In the end, the agent on the machine is running the test command rather than through a SSH session.
The second way is to build your own agent. It could be as simple as a file change trigger leading to a script executing. This is only necessary if for some reason the Jenkins slave is not able to connect to the Jenkins controller due to some networking constraints.

"Unable to access jarfile jenkins.war" getting this error while run the cmd "java -jar jenkins.war" in OS- windows 7

"Unable to access jarfile jenkins.war" getting this error while run the cmd "java -jar jenkins.war" in OS- windows 7
How can I solve?
i did installation as per what showed in youtube
Command java -jar jenkins.war in Win7 command line require administrator permission.
Right click on the cmd icon and choose the Run as administrator option.
It worked for Windows 8 too.
I also faced this issue after I updated the jenkins version.
The error message was found in <jenkins_dir>/jenkins.error.log
Resolved Step:
Download your jenkins.war at https://updates.jenkins-ci.org/download/war/
Put jenkins.war to your jenkins work directory
Go Jenkins Service and restart it
Enjoy it!
Ref: Cannot start Jenkins
Make sure you are executing that command in the folder where jenkins.war is actually installed.
Also check if the file is readable, and not preempted by another process (you can check that with Process Explorer)
Finally, double-check the size of jenkins.war, to see if the download was complete, and the file is not corrupted (incomplete or small size): see the list of jenkins.war released.
Open Command Prompt as Administrator in Windows . Go to the directory where Jenkins is installed. and stop the Jenkins service first, using jenkins.exe stop
type the command to change the port using, java -jar jenkins.war
You will be able to access the .war file of Jenkins.
I had the same issue. What worked for me was adding .jar to the file name, like
java -jar jenkins.war.jar
in case that you face an error that says, "Failed to listen on port 8080"
There is an answer here that worked for me, by pasting the following on cmd,
java -jar jenkins.war.jar --ajp13Port=-1 --httpPort=9090
do not create a folder for jenkins.war file
store it right inside downloads direction
then go to your terminal go to downloads direction not to jenkins.war file direction
then type java -jar jenkins.war
it will work

Why Jenkins isn't able to start the service, but it is starting fine when I start it manually?

I am trying to start HYBRIS server from Jenkins.
When I run the sh hybrisserver.sh start command manually in the server it starts correctly.
But, when I try to run the same command through Jenkins it is not able to start the service.
The Hybris server and Jenkins master are connected through a slave (node).
What could be the issue?
You can include following line of entry on jenkins job and it will start nicely.
export CATALINA_BASE="<Your Hybris DIR>/hybris/bin/platform/tomcat"
export WRAPPER_CONF="$CATALINA_BASE/conf/wrapper.conf"
sudo sh <Your Hybris DIR>/hybris/bin/platform/tomcat/bin/wrapper.sh start
try setting up tools environment
using https://wiki.jenkins-ci.org/display/JENKINS/Tool+Environment+Plugin
then set up required env variable and run slave as cmd through admin rights

Is there a way to open an interactive Command Prompt from a service?

When I try to execute "vstest.console.exe" file in Jenkins CI (service mode), it responses
Error: Could not start test run for unit tests for Windows Store app:
Unit tests for Windows Store apps cannot be run from a service or non
interactive process. Please run unit tests from an interactive
process..
However it will be able to run successful if I execute the same command from a Command prompt.
So I want to ask if there is a way to open Command Prompt from a service such as Jenkins CI.
I have tried with "start ExecuteVSTest.bat /I /K /REALTIME" but the result is still the same.
I couldn't find a way to open Command Prompt from a service. However I am able to resolve the problem between Jenkins CI and "vstest.console.exe".
We just need to deploy Jenkins from the WAR file via Tomcat server instead of installing Jenkins service native package.
Since the Tomcat is running in the console mode so Jenkins CI won't have the same trouble when executing "vstest.console.exe" as when it run in service mode.

Jenkins : Selenium GUI tests are not visible on Windows

When I run my selenium test (mvn test) from jenkins (windows) I see only the console output. I don't see the real browsers getting opened . How can I configure jenkins so that I can see the browsers running the test?
I had the same problem, i got the solution after many attempts.
This solution works ONLY on windows XP
If you are using jenkins as a windows service you need to do the following :
1) In windows service select the service of jenkins
2) Open properties window of the service -> Logon-> enable the checkbox "Allow service to interact with desktop"
After then you should reboot the service jenkins
Hope this help you :)
UPDATE:
Actually, I'm working on a an automation tool using Selenium on Windows 10, I've installed Jenkins ver. 2.207 as windows application (EXE file), it's running as windows service and ALL drivers (Chrome, FireFox, IE) are visible during test executions WITHOUT performing a mere configuration on the System or Jenkins
I got the solution. I ran jenkins from command prompt as "java -jar jenkins.war" instead of the windows installer version. Now I can see my browser based tests being executed.
If you are already doing what #Sachin suggests in a comment (i.e. looking at the machine where Jenkins actually runs) and still do not see the browsers, then your problem may be the following:
If you run Jenkins as a service in the background it won't open apps in the foreground. You may either try to run it not as a service in the foreground, or run it as a Local System account and check Allow the service to interact with desktop option. In the latter case you may get into permission problems, though.
Update: To make sure this answer is understood properly by others: Jenkins Windows 'native' installation is not really native. It's a wrapper around Java that runs it as a service.
To interact with desktop GUI, you should launch slave agent via JNLP:
https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds#Distributedbuilds-LaunchslaveagentviaJavaWebStart
After adding the node in Jenkins (configured as Java Web Start launch), just make a startup batch script on the node machine:
java -jar slave.jar -jnlpUrl http://{Your Jenkins Server}:8080/computer/{Your Jenkins Node}/slave-agent.jnlp
(slave.jar can be downloaded from http://{Your Jenkins Server}:8080/jnlpJars/slave.jar)
See more answers here:
How to run GUI tests on a jenkins windows slave without remote desktop connection?
In the case of Windows 7 you should not install jenkins as windows application (because in this recent version, Microsoft decided to give services their own hidden desktop even you enable the functionality "interact with desktop" in jenkins service), you may have to deploy it from a war file as follows:
1) Download jenkins.war from Jenkins official site
2) Deploy it by the command prompt : java -jar {directoryOfJenkinsFile}/jenkins.war
3) Now you can access jenkins administration on http:// localhost:8080
Hope that helps you !
this is an issue for Jenkins. on Windows it is possible to access logon user's session (screen) under system account. to make the UI testing visible, Jenkins needs to bypass UAC (user access
control) at background. this solution works for me with my own service running as system account.
I also faced the same issue earlier in my local machine (Windows 10).
My test was running perfectly from the NetBeans but when I moved to Jenkins it was only running in console mode. I was unable to view the UI.
So for that, you just need to make your local machine as a Jenkins slave by creating a new slave node in your Jenkins and select that node to execute the Jenkins job.
If jenkins installed by windows installer it is showing only Console out put only. To see browsers download jenkins.war file and run java -jar jenkins.war from command line.
Go through this site:
http://learnseleniumtesting.com/jenkins-and-continuous-test-execution/
If you have the following situation,
You are able to login to the remote machine
You don't see the Jenkins agent window
This slave machine is accessed by many users then try the following,
then try the following suggestion.
Login to slave machine
Go to Task manager
Users
Logout all the users
Then login again.
This worked for me.

Resources