Jenkins - Windows XP Slave - ssh

I'm having big problems connecting a windows slave to a working jenkins CI setup.
How do you connect using command on the master? I've tried the following command:
bash -c 'ssh user#hostname cmd /c "java -jar C:/jenkins/slave.jar -text 2>C:/jenkins/slave_error.txt"'
This successfully connects, BUT all commands talk to whatever shell has been spawned by the ssh server. This should be a new cmd shell (is this akin to a new bash shell?) as if the local user ran cmd.exe. freeSSHd claims to do this, but I can't get it to work. Instead the sshd server shipped with cygwin spawns a cmd shell, which spawns an emulated bash shell, which spawns an emulated cmd shell, which calls "java -jar slave.jar".
It seems that through all those layers of emulation, a) some system environment variables are lost, and b) windows commands run slower. Does anyone else connect to windows with ssh, and if so, how? I haven't found any information on running windows builds remotely with purely command line calls.
The build works perfectly on windows 7 through Java Web Start.
Why does the Java Web Start option, which creates a service on the slave, disconnect after ~20 hours? This option works great, but we cannot tolerate this sort of unreliability. Windows 7 has no such issue.
Why is connection through DCOM seemingly impossible to set up?
In case anyone else is trying to use "Launch slave agents on Unix machines via SSH", it cannot work at all for a windows slave. Use "Launch slave via execution of command on the Master".
Any advice is appreciated.

Related

Run : Apache:j-meter in linuxServer as GUI or any other approach

I have apache j meter installed in my local machine which has .bat file .sh executable files in it, to run in gui mode in windows, now i want to execute it on server which is in linux environment, how can i run as gui mode in server?
Actually you should not be running JMeter in GUI mode, you should use GUI mode for tests development and/or debugging. When it comes to executing the load test itself make sure you run JMeter in command-line non-GUI mode like:
jmeter -n -t test.jmx -l result.jtl
In regards to how you can proceed there are several options:
Develop the test under Windows, transfer the .jmx file to Linux box using pscp, WinSCP, FileZilla, etc.
Develop the test under Windows and run JMeter in distributed mode, i.e. have JMeter Master on Windows and JMeter Slave on Linux, see JMeter Distributed Testing Step-by-step guide for more details
You can install X Window Server implementation on Windows box (i.e. Xming or Cygwin/X and use X forwarding so you will run JMeter on linux and see its GUI on Windows.

Connect to Docker Machine remotely in Docker Toolbox

Every time i run a docker command remotely (e.g docker-machine ssh default) I always get an error saying that default is not running although I started the docker machine manually on the Windows machine. When I run "docker-machine ls" the state is set to "Timeout" but I run it on the actually windows machine and it is "Running". Im using Docker Toolbox w/ VirtalBox on Windows 10 machine with UAC disabled. I also have a Server 2012 box that shows the same results with docker toolbox. Im running the command remotely through power shell. I installed Docker Toolbox using my local account with and without elevated permissions.
I want to be able to spin up and remove docker containers from TeamCity through the command line (Teamcity on Windows).
Thanks

Can Vagrant suffice my requirement?

I have been looking out for ways to setup an automation environment and I found this application named Vagrant. I read the docs on the site, however I wanted to know from the experts out there if Vagrant with Oracle VirtualBox would suffice my needs.
I need to have a script that will call Vagrant to initialize a VM [The VM-Image is always the same - Windows Server 2008 R2]
I need to copy some of my project related files from a shared location onto the VM
Call a Batch file that will take care of test runs for me inside the VM
Once my test run is complete, This VM needs to be self destroyed/destructed.
Also, I would like to know if the Image be a custom .ISO file?
Sounds like Vagrant and VirtualBox will work for that scenario. Also, you might find that running commands in the VM using WinRM or SSH may be the easiest way to launch tests.
If you haven't already seen it, the blog post about Windows support in Vagrant 1.6 is informative: https://www.vagrantup.com/blog/feature-preview-vagrant-1-6-windows.html
Creating a VirtualBox/Vagrant base VM from an .iso should work, and you can then do all of your work using the VM from that point onward.
To get started, you might try these steps:
Create a VirtualBox VM from your Windows .iso, using the VirtualBox GUI or cmdline tools.
Once you have the VM in the state you want it, shut it down and package it as a vagrant box - for example, on a Mac that step looks like (where Win7x64 is the dir containing the VirtualBox VM):
cd ~/VirtualBox\ VMs
vagrant package --base Win7x64 --output win7x64_base.box
Once that finishes, tell vagrant about the new base box:
vagrant box add win7x64_base /path/to/win7_base.box
Then you can vagrant init/vagrant up the VM:
mkdir win7 && cd win7
vagrant init win7x64
vagrant up
To enable SSH access, I installed Cygwin in the VM and configured sshd. So, after launching you can SSH in by running vagrant ssh
Note that if there's no Windows user in the VM named 'vagrant', you can specify the SSH username to use with vagrant ssh by placing this in your Vagrantfile:
config.ssh.username = 'user1'
As mentioned above, WinRM is also an option for remotely running commands.
And Vagrant apparently has some convenience features to make it easy to RDP into the VM, but I haven't looked at that.

How to get Sikuli working in headless mode

If we have a headless test server running sikuli (both ubuntu and windows configurations needed), how to get it work without a physical monitor and preferably for as many screen resolutions as possible.
I successfully got sikuli running in headless mode (no physical monitor connected)
Ubuntu: check Xvfb.
Windows: install display driver on the machine (to be headless) from virtualbox guest additions display drivers and use TightVNC to remotely set resolution from another machine.
Detailed steps for windows 7
Assume that:
Machine A: to be headless machine, windows 7, with vnc server ready (e.g. TightVNC server installed and waiting for connections).
Machine B: will be used to remotely setup the virtual display driver on machine A.
steps:
Download virtualbox guest additions iso file on Machine A from here (for latest version check latest version here and download VBoxGuestAdditions_x.y.z.iso)
Extract iso file (possibly with winrar) into a directory (let us call it folder D)
using command prompt cd to D folder
Driver extraction
-To extract the 32-bit drivers to "C:\Drivers", do the following:
VBoxWindowsAdditions-x86 /extract /D=C:\Drivers
-For the 64-bit drivers:
VBoxWindowsAdditions-amd64 /extract /D=C:\Drivers
Goto device manager
add hardware
Restart and connect with VNC viewer, now you should be able to change screen resolution
other valuable info on launchpad.
I got SikuliX working in a true headless mode in GCE with a Windows 2016 client system. It takes some duct tape and other Rube Goldberg contraptions to work, but it can be done.
The issue is that, for GCE (and probably AWS and other cloud environment Windows clients), you don't have a virtual video adapter and display, so, unless there's an open RDP connection to the client, it doesn't have a screen, and SikuliX/OpenCV will get a 1024x768 black desktop, and fail.
So, the question is, how to create an RDP connection without having an actual screen anywhere. I did this using Xvfb (X Windows virtual frame buffer). This does require a second VM, though. Xvfb runs on Linux. The other piece of the puzzle is xfreerdp 2.0. The 2.x version is required for compatibility with recent versions of Windows. 1.x is included with some Linux distros; 2.x may need to be built from sources, depending on what flavor Linux you're using. I'm using CentOS, which did require me to build my own.
The commands to establish the headless RDP session, once the pieces are in place, look something like this:
/usr/bin/Xvfb :0 -screen 0 1920x1080x24 &
export DISPLAY=:0.0
/usr/local/bin/xfreerdp /size:1920x1080 /u:[WindowsUser] /p:"[WindowsPassword]" /v:[WindowsTarget]
In our environment we automated this as part of the build job kicked off by Jenkins. For this to work under the Jenkins slave, it was also necessary to run the Jenkins slave as a user process, rather than a service... this can be accomplished by enabling auto admin login and setting the slave launch script as a run (on logon) command.
For those looking to automate on ec2 windows machines, this worked for me: http://www.allianceglobalservices.com/blog/executing-automation-suite-on-disconnectedlocked-machines
In summary, I used RDC to connect, put the following code in a batch file on remote desktop, double clicked it, and sikulix started working remotely (kicking me out of RDC at the same time). Note that ec2 windows machines default to 1024x768 when tscon takes over which may be too small so TightVnc can be used to increase the resolution to 1280x1024 before running.
tscon.exe 0 /dest:console
tscon.exe 1 /dest:console
tscon.exe 2 /dest:console
tscon.exe 3 /dest:console
START /DC:\Sikulix /WAIT /B C:\Sikulix\runsikulix.cmd -d 3 -r C:\test.sikuli -f C:\Sikulix\log.txt -d C:\Sikulix\userlog.txt
I just figure out a way to resolve similar issue.
My env:
local: windows pc
remote (for running sikulix + app I would like to test): windows ec2 instance
My way:
1.create a .bat file, its contents:
ping 127.0.0.1 -n 15 > nul
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
%windir%\System32\tscon.exe %%s /dest:console
)
cd "\path\to\sikulix"
java -jar sikulixide-2.0.5.jar -r /path/to/sikulix -c > logfile.log
prepare your app
run the bat (right click > run as administrator)
ping will give your 10s, so that you can bring your app back to front
you will be disconnnected from rdp connection
Explanation:
ping is like "sleep"
for loop: kick out current user & keep session alive

How to run a program in SSH?

So I want to run an .exe in SSH but can't figure out, help please?
I'm trying to run a server for my game i'm making and need this on my vps so anyone can connect, but can't figure out how to run it in SSH on my vps.
SSH is a protocol and will, by itself, never run any program. Depending on the Shell you're running inside SSH and the operating system in use you will start your executable:
Linux: ./program
Windows: program.exe
Note: exe usually indicates a Windows program. Most Linux/Unix servers have SSH access, while Microsoft servers usually don't. Are you trying to start a windows exe on a Linux machine? That will not work (ever). Unless it is a .NET executable, in which case you can start in using the mono-framework.
You need ./ before the program name, like this
./program.exe
You want to install an SSH server and make it run your own program instead of the default shell? How to configure that depends entirely on which product / package you are using; but perhaps rephrasing the problem for you is sufficient for helping you find the configuration directive you need in the documentation.
For windows, you can use the following command:
ssh username#remotePcIP "\file.exe"
Linux: This will run a series of commands remotely into a remote machine with ssh (make sure your username has direct access and password is not required):
ssh remotemachine ' command1 | command2 | command3 '