我试图在Jenkins Windows从属节点上构建一个Java项目,并且当我尝试从Jenkins服务对从属节点运行任何mvn
命令时,错误消息,命令无法找到:在Jenkins窗口从属节点上无法识别'mvn'命令
java.io.IOException: Cannot run program "mvn": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
...
注:如果我登录到机器直接,运行任何mvn
命令的作品就好了。
的Windows从节点安装
的Maven安装的目录
D:\Apache\Maven
。设置系统环境变量:
JAVA_HOME
=C:\Program Files\Java\jdk1.8.0_40
M2
=%M2_HOME%\bin
M2_HOME
=D:\Apache\Maven
的
PATH
系统环境变量设置为%M2%;...
从Jenkins主页的网页上,如果我在Windows从节点上运行Groovy脚本println System.getenv("PATH")
,我可以看到它具有正确的扩展路径,用于Maven的bin
目录。
Groovy脚本:
我还可以验证Maven的
bin
目录可以通过运行下面可以看到println "ls -al D:/Apache/Maven/bin".execute().text
total 14 drwxr-xr-x 8 D-AUN-00 Administ 4096 Apr 20 12:35 . drwxr-xr-x 9 D-AUN-00 Administ 4096 Mar 31 11:46 .. -rw-r--r-- 1 D-AUN-00 Administ 230 Mar 31 11:46 m2.conf -rwxr-xr-x 1 D-AUN-00 Administ 7085 Apr 20 11:49 mvn -rw-r--r-- 1 D-AUN-00 Administ 6007 Mar 31 11:46 mvn.cmd -rwxr-xr-x 1 D-AUN-00 Administ 1796 Mar 31 11:46 mvnDebug -rw-r--r-- 1 D-AUN-00 Administ 1513 Mar 31 11:46 mvnDebug.cmd -rwxr-xr-x 1 D-AUN-00 Administ 1843 Mar 31 11:46 mvnyjp
奇怪的是,如果我mvn.cmd
运行Maven,那么Maven运行得很好:
Groovy脚本:
println "mvn.cmd --version".execute().text
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-13T15:10:27-05:00) Maven home: D:\Apache\Maven Java version: 1.8.0_40, vendor: Oracle Corporation Java home: C:\Program Files\Java\jdk1.8.0_40\jre Default locale: en_US, platform encoding: Cp1252 OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "dos"
问:有什么我缺少或没有正确安装,将导致mvn
命令不被认可?
编辑:我运行的版本使用了自定义的Python bash脚本调用的Maven。该脚本还设置为运行其他语言(PHP,Ruby,.NET,Node)项目的构建,并且这些构建的工具都可以正常工作(composer
,bundle
,devenv.com
)。但是,如果在尝试运行mvn
命令时,从节点的脚本控制台返回相同的错误,我认为构建的执行方式应该没有关系。
编辑2:我越考虑这一点,少我觉得这有什么关系詹金斯多用怎样的shell脚本在Windows上执行的事情。当我使用脚本控制台调用从节点上的Groovy脚本时,Jenkins只是将它写到从节点上的临时文件中,并使用sh -xe <script>
来调用它。当我在Windows计算机上直接尝试类似的方法时,除非我在sh
之前加上命令,否则每个基于脚本的命令(例如mvn
,composer
)都无法从shell脚本中运行。这很不幸,因为我正在运行的脚本可能在将来运行在Linux或Mac节点上,我宁愿不使用特定于Windows的命令来散布它。我已经用Git Bash和Msysgit尝试过了,我得到了相同的结果。接下来,我将尝试Cygwin以查看它是否可行...
你用什么构建步骤来触发'mvn'? – Slav
@Slav我使用自定义的shell执行的Python脚本在包含Maven调用的从站上运行。除了Maven,该脚本中的所有内容都可以工作。出于某种原因,运行在从属服务器上的Jenkins服务不会将'mvn'识别为命令,即使所有内容似乎都已正确设置。 FWIW,Python脚本也用于在从站(PHP,Ruby,.NET,Node)上使用其他语言构建项目,并且所有这些工作都很好('composer','bundle','devenv'和一些额外的手持:P) –
好吧,从头开始,'composer','bundle','npm',以及其他几乎所有基于脚本的命令都会返回相同的错误。我们的詹金斯大师最近升级了,所以我想知道它是否与此有关。我将尝试卸载从服务并从(现在升级的)主服务器重新安装。 –