Jenkins自动在PATH前面加上java和ant的路径.如何禁用



在一个自由形式的项目中,我使用"注入环境变量":

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进入路径?

Updjenkins_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将PATHPATH+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。

最新更新