本文共 9610 字,大约阅读时间需要 32 分钟。
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= 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= 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= 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=... 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/DtCode changed in jenkins
User: Kohsuke Kawaguchi Path: src/main/java/hudson/maven/AbstractMavenBuild.java src/main/java/hudson/maven/MavenModuleSetBuild.java Log: 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:
Relevant conversation:
(11:31:53 AM) KostyaSha: kohsuke, while windows is eating your IO, could you advice with ?
(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, 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: :Xvnc does not set the DISPLAY environment (Closed) (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转载地址:http://uojab.baihongyu.com/
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.