https://issues.jenkins-ci.org/browse/JENKINS-3502
Since an update to version 1.6 and Hudson 1.299 the DISPLAY variable is not set
during the build process anymore.
We try to test a SWT application wich requires this env-var or refuses to start.
Below is first the SWT exception - with a cryptic error message but this means
not DISPLAY is found.
Below the trace are all system properties printed by Sytem.getProperties().list(...)
Exception in thread "main" org.eclipse.swt.SWTError: No more handles
[gtk_init_check() failed]
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
at org.eclipse.swt.widgets.Display.create(Unknown Source)
at org.eclipse.swt.graphics.Device.<init>(Unknown Source)
at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
at org.eclipse.swt.widgets.Display.getDefault(Unknown Source)
at de.willuhn.jameica.gui.GUI.getDisplay(GUI.java:748)
at de.willuhn.jameica.gui.SplashScreen.<init>(SplashScreen.java:69)
at
de.willuhn.jameica.system.ApplicationCallbackSWT.getStartupMonitor(ApplicationCallbackSWT.java:168)
at de.willuhn.jameica.system.Application.init(Application.java:96)
at de.willuhn.jameica.system.Application.newInstance(Application.java:86)
at de.willuhn.jameica.Main.main(Main.java:78)
System Properties:
– listing properties –
java.vendor=Sun Microsystems Inc.
JOB_NAME=c - jameica-update-server
PWD=/home/markusw/emedia-solutions-wolf.d...
localRepository=/home/markusw/.m2/repository
sun.java.launcher=SUN_STANDARD
sun.management.compiler=HotSpot Client Compiler
PATH=/home/markusw/bin:/usr/local/bin:/usr...
os.name=Linux
sun.boot.class.path=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/...
EXECUTOR_NUMBER=0
env.PWD=/home/markusw/emedia-solutions-wolf.d...
env.LANG=de_DE.UTF-8
java.vm.specification.vendor=Sun Microsystems Inc.
java.runtime.version=1.5.0_16-b02
LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun-1.6.0.10/jre/...
user.name=markusw
env._=/usr/bin/nohup
env.USER=markusw
env.SHELL=/bin/bash
env.NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
env.PATH=/usr/lib/jvm/java-1.5.0-sun/bin:/home...
user.language=de
sun.boot.library.path=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/...
java.version=1.5.0_16
user.timezone=Europe/Berlin
sun.arch.data.model=32
TERM=xterm
NLSPATH=/usr/dt/lib/nls/msg/%L/%N.cat
java.endorsed.dirs=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/...
BUILD_ID=2009-04-16_08-18-23
sun.cpu.isalist=
sun.jnu.encoding=UTF-8
file.encoding.pkg=sun.io
env.SHLVL=2
SHELL=/bin/bash
file.separator=/
env.SVN_REVISION=67
java.specification.name=Java Platform API Specification
java.class.version=49.0
user.country=DE
env.BUILD_NUMBER=66
java.home=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/jre
java.vm.info=mixed mode, sharing
env.LOGNAME=markusw
os.version=2.6.27-11-generic
env.HUDSON_COOKIE=42d394fc-8cfa-4a21-b1c0-3d6037b8425a
path.separator=:
java.vm.version=1.5.0_16-b02
env.LANGUAGE=de_DE:de:en_GB:en
env.JOB_NAME=c - jameica-update-server
SHLVL=2
_=/usr/bin/nohup
env.JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
java.awt.printerjob=sun.print.PSPrinterJob
env.TERM=xterm
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
sun.io.unicode.encoding=UnicodeLittle
LOGNAME=markusw
HOME=/home/markusw
env.HUDSON_URL=http://hudson.emedia-solutions-wolf.de/
env.BUILD_TAG=hudson-c - jameica-update-server-66
maven.interceptor=/home/markusw/.hudson/plugins/maven-p...
user.home=/home/markusw
BUILD_TAG=hudson-c - jameica-update-server-66
HUDSON_URL=http://hudson.emedia-solutions-wolf.de/
env.OLDPWD=/home/markusw/emedia-solutions-wolf.d...
java.specification.vendor=Sun Microsystems Inc.
CLASSPATH=
java.library.path=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/...
java.vendor.url=http://java.sun.com/
env.HUDSON_HOME=/home/markusw/.hudson
java.vm.vendor=Sun Microsystems Inc.
java.runtime.name=Java(TM) 2 Runtime Environment, Stand...
maven.home=/usr/local/apache-maven-2.0.9
java.class.path=/home/markusw/.hudson/plugins/maven-p...
env.EXECUTOR_NUMBER=0
env.XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
java.vm.specification.name=Java Virtual Machine Specification
PATH+JDK=/usr/lib/jvm/java-1.5.0-sun/bin
java.vm.specification.version=1.0
sun.os.patch.level=unknown
sun.cpu.endian=little
MAIL=/var/mail/markusw
env.HOME=/home/markusw
surefire.test.class.path=/home/markusw/.hudson/jobs/c - jameic...
java.io.tmpdir=/tmp
env.LD_LIBRARY_PATH=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/...
HUDSON_HOME=/home/markusw/.hudson
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...
OLDPWD=/home/markusw/emedia-solutions-wolf.d...
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
os.arch=i386
java.ext.dirs=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16/...
SVN_REVISION=67
user.dir=/home/markusw/.hudson/jobs/c - jameic...
env.BUILD_ID=2009-04-16_08-18-23
line.separator=
java.vm.name=Java HotSpot(TM) Client VM
BUILD_NUMBER=66
basedir=/home/markusw/.hudson/jobs/c - jameic...
file.encoding=UTF-8
env.MAIL=/var/mail/markusw
LANG=de_DE.UTF-8
env.WORKSPACE=/home/markusw/.hudson/jobs/c - jameic...
WORKSPACE=/home/markusw/.hudson/jobs/c - jameic...
java.specification.version=1.5
LANGUAGE=de_DE:de:en_GB:en
USER=markusw
XFILESEARCHPATH=/usr/dt/app-defaults/%L/Dt
Activity
Code changed in jenkins
User: Kohsuke Kawaguchi
Path:
src/main/java/hudson/maven/AbstractMavenBuild.java
src/main/java/hudson/maven/MavenModuleSetBuild.java
http://jenkins-ci.org/commit/maven-plugin/cab3151ea023536ab789f3b74a891f38144fe302
Log:
JENKINS-20884 Mutating 'envVars' returned from getEnvironment() creates a bad precedent.
It is better to just recompute the envVars, which will reflect all the added environments.
See: https://github.com/jenkinsci/maven-plugin/pull/14
Relevant conversation:
(11:31:53 AM) KostyaSha: kohsuke, while windows is eating your IO, could you advice with https://github.com/jenkinsci/maven-plugin/pull/14 ?
(11:34:27 AM) kohsuke: KostyaSha: the bug looks legit, but I'm not sure about the fix. Basically I agree with Jesse's comment
(11:35:35 AM) KostyaSha: kohsuke, this broken by design i think, it should be a good idea to share envvars for builders. This should also reduce .getEnvironments() calls
(11:36:33 AM) KostyaSha: kohsuke, is there any place where they maybe safely shared?
(11:37:03 AM) kohsuke: I'm afraid I don't understand the notion of "sharing envvars"
(11:37:35 AM) kohsuke: It gets computed from various things, and I thought EnvironmentContributingAction is a part of it
(11:38:44 AM) KostyaSha: kohsuke, yes, and they are stored in envvars variable, then job calls prebuilders that modifies EnvironmentContributingAction and then job calls maven build with not updated envvars content
(11:39:05 AM) kohsuke: then it should just call EnvVars envVars = getEnvironment(listener); again
(11:39:50 AM) KostyaSha: kohsuke, i not sure that there is no any specific changes with envvars after first getEnvironment(listener) call and before prebuilders
(11:40:30 AM) KostyaSha: i compared on my local instance and this should work, but i not sure... potentially some changes to envvars maybe lost...
(11:40:31 AM) kohsuke: Basically, one should never modify what Run.getEnvironment() returned
(11:40:51 AM) kohsuke: If the map returned is missing some desirable entries, then it should be fixing by having the getEnvironment() implementation add them
(11:41:11 AM) kohsuke: It looks to me that this change violates that idea
(11:42:02 AM) KostyaSha: i like idea of refreshing with simple call to getEnvironment(listener)
(11:42:03 AM) kohsuke: if environment-contributing subset of rootBuild.actions should be a part of the env vars, according to the above principle it should be done in the getEnvironment() method
(11:42:52 AM) kohsuke: (Also, let's not print out random stuff into "logger.println" that most users would not care
(11:43:02 AM) kohsuke: Those should be j.u.logging statements)
(11:43:28 AM) KostyaSha: kohsuke, yeah this logger not needed of course
(11:44:55 AM) KostyaSha: kohsuke, https://github.com/zygm0nt/maven-plugin/blob/master/src/main/java/hudson/maven/MavenModuleSetBuild.java#L648 what this part do?
(11:45:44 AM) kohsuke: That looks wrong to me, too, for the same reason
(11:45:49 AM) kohsuke: All right, you convinced me to open this in IDE
(11:46:03 AM) kohsuke: Screw the preparation for the meeting
(11:47:29 AM) kohsuke: Wow, that line has jglick fixing HUDSON-3502
(11:47:31 AM) jenkins-admin: JENKINS-3502:Xvnc does not set the DISPLAY environment (Closed) https://issues.jenkins-ci.org/browse/JENKINS-3502
(11:48:06 AM) KostyaSha: 0_o
(11:48:17 AM) kohsuke: From 2009
(11:49:34 AM) KostyaSha: kohsuke, and the next block is also added for resolving variables
(11:49:42 AM) kohsuke: Yep
(11:50:28 AM) KostyaSha: so after every step we need recalculate changes... so easy to allow do direct modifications of envvars i think
When I create a simple job and output the 'env' cmd on the shell the DISPLAY is
set. But the strange thing in that is that during my test (surefire) all hudson
specific env-vars are set (like HUDSON_HOME, HUDSON_URL, ...) only the DISPLAY
is missing.