在一个自由形式的项目中,我使用"注入环境变量":
JAVA_HOME=/u01/jenkins/jdk1.8.0_181/jre
PATH=/u01/jenkins/jdk1.8.0_181/jre/bin:/u01/jenkins/apache-maven-3.0.5/bin:${PATH}
然而,在shell脚本中,$PATH
获得了一个额外的前缀:
++ echo PATH=/u01/jenkins/jdk1.7.0_55/bin:
/u01/jenkins/apache-ant-1.9.6/bin:/u01/jenkins/apache-maven-3.0.5/bin:
/u01/jenkins/DependencyFinder-1.2.1-beta4/bin:
/bin:/u01/jenkins/fly:/u01/jenkins/jdk1.7.0_55/bin:
/u01/jenkins/jdk1.8.0_181/jre/bin:<the-original-path>
如何找到导致它的原因,并最终让我的java8进入路径?
Upd:jenkins_shell
脚本正在添加除/u01/jenkins/jdk1.7.0_55/bin
之外的所有条目。现在已修复。但我仍然不知道是谁在向java添加第一个入口路径。
如果JDK在Manage Jenkins -> Global Tool Configuration
中配置,则会创建一个全局环境变量:PATH+JDK=/u01/jenkins/jdk1.7.0_55/bin
,并且就在执行shell脚本之前,Jenkins将PATH
与PATH+JDK
(实际上,任何以"PATH+"开头的变量
https://github.com/jenkinsci/jenkins/blob/c904989067aa699ea63d043c44f6ea905cb9c5d5/core/src/main/java/hudson/EnvVars.java#L144
解决方法是注入一个空的PATH+JDK=
变量以完全禁用预处理或注入PATH+JDK=/path/to/proper/jdk
。
此外,由于EnvVars extends TreeMap
,您可以注入另一个变量:PATH+ZZZ=/path/to/something
,它的前缀晚于PATH+JDK
,因为Jenkins按字母顺序迭代这些变量。
最后,可以配置一个没有可执行文件的伪JDK,并在Job的下拉列表中选择这个伪JDK。