Plugin Information |
---|
View VncRecorder on the plugin site for more information. |
This plugin records screen of current build or other configured VNC session as Shock Wave Flash (swf) file during a build and stores it as an artifact. This plugin can be used in combination with VncViewer and Xvnc plugin.
After the build, the video file gets also published as a HTTP link in the "Console output" of the build. The generated HTML file embeds a video and makes it possible to navigate within a recorded video directly in browser.
Requirements
- Linux on Jenkins master node
- vnc2swf on Jenkins master node
How you use the plugin in a job
Example for usage together with Xvnc plugin
Result: video in your Browser
Link in "Console output"
Store as build artifact
The generated HTML file MyTest_2.html embeds video MyTest_2.swf and makes it possible to navigate within a video directly in browser.
Path of vnc2swf
Path of used vnc2swf can be customized under "Jenkins System configuration / Global settings". Default is the vnc2swf found in the PATH variable.
20 Comments
Unknown User (mwoi)
Nice plugin, thanks for this opportunity.
But i have a question: Is it possible to use the $DISPLAY system variable that's given by the Xvnc plugin? The build is running on a slave, so not on the master. When i setup the VNC server to myserver:$DISPLAY an error is thrown:
ERROR pool-14-thread-9 Command: vnc2swf, -o, /var/lib/jenkins/jobs/MyJob/builds/2014-09-16_17-35-26/archive/MyJob.swf, -P, /var/lib/jenkins/.vnc/passwd, -t, swf5, -n, -e, 0, myserver:$DISPLAY returned: 1, trying 2 from 50
Because of the use of the Xvnc plugin it's not possible to define the DISPLAY variable before.
Unknown User (tbaum)
It's a problem of plugin ordering control. Xvnc was called AFTER vncrecorder, this is the reason why vncrecorder didn't get DISPLAY variable set by Xvnc plugin.
I set ordinal of vncrecorder lower than ordinal of Xvnc plugin and it works now.
See http://javadoc.jenkins-ci.org/hudson/Extension.html#ordinal for more info.
Try it again with vncrecorder release 1.8 and set "myserver$DISPLAY" instead of "myserver:$DISPLAY" as "VNC server" because ":" is already part of $DISPLAY env. variable.
Unknown User (mwoi)
Now the combination with the Xvnc plugin works correctly. Thank you!
Unknown User (tbaum)
You are welcome!
Unknown User (chhung)
Hi,
How can I set ordinal of vncrecoreder.
Unknown User (tbaum)
It isn't configurable now. What is your reason for that - any additional dependencies?
Unknown User (chhung)
I'm using xvfb and xvnc in automated UI testing and I wanna record all activity in the test (especially failure case)
But when I used vncrecorder, I got the same issue as Martin Woit, It's meaning my jenkins didn't start xvnc when I combined xvnc with vncrecorder...
Unknown User (tbaum)
The issue of Martin was a problem of plugin start order: Xvnc started after VncRecorder, but Xvnc was started anyway.. Start order issue is already fixed, ordinal of VncRecorder was set lower than ordinal of Xvnc (-1) in source code of VncRecorder.
Your problem of failed Xvnc start seems to be a new issue. Do you have any error output of Xvnc?
Is your build running on the slave node? In this case, your xvnc server must run without -localhost argument (that's default setting of Xvnc plugin). With -localhost argument your VncRecorder can't connect vnc server on slave, because your listening vnc port is accessible for local use only.
Unknown User (chhung)
I'm running jenkins on master without any slave.
This is my output
org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
(process:5161): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Error: cannot open display: localhost:89
(process:5168): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
Error: cannot open display: localhost:89
This is my configuration : http://i.imgur.com/wvKYtC3.png
Global configurations for Xnxc/Xvfb/Vncrecorder are default
One more question : How can I record failure only case?
Unknown User (tbaum)
I think the problem is your Xvfb / Xvnc combination.
Try this:
You can't record failed tests only without crystal ball that predicts which test is going to fail :-)
On the other hand, configurable removing of recorded videos of successful tests makes sense - it will be a feature of the next release of vncrecorder.
Unknown User (chhung)
Thank you, It run...
There are many test classes in my project, and there are many test cases in each test class...I wanna trigger VncRecorder for every failed test case.So, do you have any idea for this situation?
btw, I saw "killall xclock" in image above, did you run xclock in vncrecorder?How can I start xclock with VnC recorder? 'cause I need timestamp on recorded video.
Unknown User (tbaum)
You are welcome!
There is no possibility to record failed test only yet. Configurable removing of recorded videos of successful tests will be a feature of the next release, my hint is: wait for it..
Xclock in my screenshot was an example, in your case you could start xclock it before your test run.
This is my favored xclock call for this purpose:
xclock -geometry -20-10 -d -update 1 -strftime "%H:%M:%S" 2>/dev/null &
Unknown User (chhung)
Hello Dimitri Tenenbaum,
Today, when I run my job, I got new issue :2015-01-14 10:55:20,733 ERROR pool-57-thread-2 Command: /usr/bin/vnc2swf, -o, /var/lib/jenkins/jobs/MYJOB/builds/2015-01-14_10-41-54/archive/MYJOB.swf, -P, /var/lib/jenkins/.vnc/passwd, -t, swf5, -n, -e, 0, localhost:1710 returned: 1, trying 1 from 50
2015-01-14 10:55:20,736 ERROR pool-57-thread-2 Using pygame 1.9.1release
2015-01-14 10:55:20,739 ERROR pool-57-thread-2 Connected: localhost:7610, protocol_version=3.8, preferred_encoding=(0, -232, -239)
2015-01-14 10:55:20,740 ERROR pool-57-thread-2 VNC Screen: size=1360x768, name='ubuntu:1710 (jenkins)'
2015-01-14 10:55:20,741 ERROR pool-57-thread-2 Output movie size: 1360x768
2015-01-14 10:55:20,743 ERROR pool-57-thread-2 Creating movie: '/var/lib/jenkins/jobs/MYJOB/builds/2015-01-14_10-41-54/archive/MYJOB_25.swf': version=5, size=1360x768, framerate=12.0, compression=None
2015-01-14 10:55:20,749 ERROR pool-57-thread-2 Traceback (most recent call last):
2015-01-14 10:55:20,751 ERROR pool-57-thread-2 File "/usr/bin/vnc2swf", line 611, in <module>
2015-01-14 10:55:20,753 ERROR pool-57-thread-2 if _name_ == "_main_": sys.exit(main(sys.argv))
2015-01-14 10:55:20,754 ERROR pool-57-thread-2 File "/usr/bin/vnc2swf", line 598, in main
2015-01-14 10:55:20,755 ERROR pool-57-thread-2 merge=merge, debug=debug)
2015-01-14 10:55:20,756 ERROR pool-57-thread-2 File "/usr/bin/vnc2swf", line 427, in vnc2swf
2015-01-14 10:55:20,758 ERROR pool-57-thread-2 client.loop()
2015-01-14 10:55:20,759 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/rfb.py", line 469, in loop
2015-01-14 10:55:20,760 ERROR pool-57-thread-2 while self.loop1():
2015-01-14 10:55:20,762 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/rfb.py", line 445, in loop1
2015-01-14 10:55:20,763 ERROR pool-57-thread-2 self.finish_update()
2015-01-14 10:55:20,764 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/rfb.py", line 133, in finish_update
2015-01-14 10:55:20,764 ERROR pool-57-thread-2 self.fb.update_screen(time.time())
2015-01-14 10:55:20,765 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/rfb.py", line 818, in update_screen
2015-01-14 10:55:20,770 ERROR pool-57-thread-2 self.stream.next_frame()
2015-01-14 10:55:20,773 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/output.py", line 564, in next_frame
2015-01-14 10:55:20,774 ERROR pool-57-thread-2 self.add_object(self.screen.get_image(x0, y0, w, h), depth, x0, y0)
2015-01-14 10:55:20,778 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/output.py", line 531, in add_object
2015-01-14 10:55:20,779 ERROR pool-57-thread-2 self.place_object2(self.define_shape(w, h, data), x, y, depth)
2015-01-14 10:55:20,780 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/output.py", line 427, in define_shape
2015-01-14 10:55:20,782 ERROR pool-57-thread-2 shape_id = self.writer.newid()
2015-01-14 10:55:20,785 ERROR pool-57-thread-2 File "/usr/share/pyvnc2swf/swf.py", line 799, in newid
2015-01-14 10:55:20,789 ERROR pool-57-thread-2 assert self.objid < 65536, 'the number of objects exceeded the limit!'
2015-01-14 10:55:20,790 ERROR pool-57-thread-2 AssertionError: the number of objects exceeded the limit!
What is that?And how to fix it?
P/S : It took about 18mins to run this job.
Unknown User (tbaum)
Hello Hung,
according to google, OS update would help, see:
https://bugzilla.redhat.com/show_bug.cgi?id=864043
Unknown User (chhung)
Yep, thank you Dimitri...But I'm using Ubuntu 14.04.1 LTS.
Unknown User (tbaum)
Configurable removing of recorded videos of successful tests is ready - you can use this feature from release 1.18.
Unknown User (cutang)
Hi Dimitri,
It's a nice plug-in. The requirement says "Linux master node". I do have a linux master, and my test is running on a Windows slave. When I start the build running this Window slave with vnc recorder enabled, I got error:FATAL: Feature "Record VNC session" works only under Unix/Linux!. Is it TRUE that it doesn't work on Windows Slave, or something to be with my configuration?
Thanks!
Unknown User (tbaum)
Hi Cunyong,
I checked OS of wrong node - thank you for bug report. Fixed in release 1.21. VncRecorder runs on master only, it should work with any Slaves with working VNC server.
By the way, Jira is more suitable for such issues - I have noticed your comment by pure chance ;-)
Unknown User (boblloyd1981)
Not sure what I might be doing wrong, but when I use the vncrecorder in conjunction with xvnc plugin, I don't get an .swf file to generate. Everything else runs fine (it creates the display), however no file is generated.
My configuration has vnc2swf installed on the Jenkins master and configured with the path (/usr/bin/vnc2swf).
Global Configuration:
Job Configuration:
This is my log:
Unknown User (sbonami)
Same problem on my side. Have you found the solution?