ablage-zz / visual-diff-plugin

A Jenkins plug-in to manage differences in screenshots
MIT License
1 stars 1 forks source link

FATAL: Cannot run program "null" #1

Open seblepers opened 10 years ago

seblepers commented 10 years ago

Hi,

I'm quite interested in your plugin and managed to build/install it on my Jenkins. But at the moment of comparing screens, i get the following error :

Building in workspace /home/jenkins/jobs/Test/workspace
Create folder: /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff
Create folder: /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/build
Create folder: /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/diff
Create folder: /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/approved
Copy approved screens...
Copy build results...
Compare screens...
null -fov 45.0 -threshold 100 -gamma 2.2 -luminance 100.0 -colorfactor 1.0 -downsample 0 -output /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/diff/home.png /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/approved/home.png /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/build/home.png
[workspace] $ null -fov 45.0 -threshold 100 -gamma 2.2 -luminance 100.0 -colorfactor 1.0 -downsample 0 -output /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/diff/home.png /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/approved/home.png /home/jenkins/jobs/Test/builds/2014-09-08_17-00-17/vDiff/build/home.png
FATAL: Cannot run program "null" (in directory "/home/jenkins/jobs/Test/workspace"): error=2, Aucun fichier ou dossier de ce type
java.io.IOException: Cannot run program "null" (in directory "/home/jenkins/jobs/Test/workspace"): error=2, Aucun fichier ou dossier de ce type
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
    at hudson.Proc$LocalProc.<init>(Proc.java:244)
    at hudson.Proc$LocalProc.<init>(Proc.java:216)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:780)
    at hudson.Launcher.launch(Launcher.java:537)
    at hudson.Launcher.launch(Launcher.java:469)
    at hudson.Launcher.launch(Launcher.java:461)
    at hudson.Launcher.launch(Launcher.java:395)
    at org.jenkinsci.plugins.visual_diff.comparison.PerceptualDiff.compareScreens(PerceptualDiff.java:229)
    at org.jenkinsci.plugins.visual_diff.comparison.ComparisonDescribable.processOne(ComparisonDescribable.java:187)
    at org.jenkinsci.plugins.visual_diff.comparison.ComparisonDescribable.processAll(ComparisonDescribable.java:131)
    at org.jenkinsci.plugins.visual_diff.Builder.perform(Builder.java:121)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:772)
    at hudson.model.Build$BuildExecution.build(Build.java:199)
    at hudson.model.Build$BuildExecution.doRun(Build.java:160)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:535)
    at hudson.model.Run.execute(Run.java:1732)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:234)
Caused by: java.io.IOException: error=2, Aucun fichier ou dossier de ce type
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
    ... 20 more

It tries to run a null command... Any clue?

Thanks in advance.

seblepers commented 10 years ago

I finally managed to run successfully the plugin. By installing "perceptualdiff" package (on Ubuntu). And configuring the binay path in the system configuration screen : Visual-Diff - Perceptual-Diff with the following value : "/usr/bin/perceptualdiff".

I guess this information could be added as installation information in the README.md file.

marcelerz commented 10 years ago

Yes, thank you! I just added this to the ReadMe.

However, the project is currently WIP since I redesigned the whole user interface as the previous one was a little cumbersome to work with, especially with many screenshots, and had some minor bugs. The current interface, as you might have already seen isn't work yet. I uploaded the hpi of the latest working plugin (visual-diff.hpi in the root), but be aware that the newer versions configuration is incompatible to the hpi supplied; it was a proof of concept. I haven't worked on this for a while, but I will shift my priorities to this plugin and will try to get a production-ready version until next weekend.

Sorry for the current mess!

seblepers commented 10 years ago

Don't be sorry!!! :) Thanks for sharing your code!

I tried the hpi you just commited, it's working much better :)

The only bug on my installation is the graph chart which returns the following exception:

javax.servlet.ServletException: java.lang.NullPointerException
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:778)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
    at org.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:390)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
    at org.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:390)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
    at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:248)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:858)
    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:631)
    at org.kohsuke.stapler.Stapler.service(Stapler.java:225)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
    at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
    at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at jenkins.security.ApiTokenFilter.doFilter(ApiTokenFilter.java:74)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
    at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
    at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
    at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at org.jenkinsci.plugins.visual_diff.CompareAction.createDataSet(CompareAction.java:275)
    at org.jenkinsci.plugins.visual_diff.CompareAction.doGraph(CompareAction.java:299)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)
    at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)
    at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)
    at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:120)
    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:728)
    ... 69 more