Jenkins master在Windows上运行。我已经连接了一个MAC作为詹金斯奴隶使用java webstart。我已经在从机(MAC)中安装了ANT,并相应地更新了PATH。我可以在从机上本地运行ant程序。
当我从jenkins运行作业时,它没有调用ant并且失败,错误如下。请澄清。
Building remotely on QAXXX in workspace /Users/uselvvi/jenkins/workspace/QG_LOCALIZATION_STAGING
Cleaning up /Users/uselvvi/jenkins/workspace/QG_LOCALIZATION_STAGING/.
Updating https://<SVNRepo>/SVN at revision '2014-03-24T15:55:41.180 -0500'
At revision 1196
no change for https://<SVNRepo>/SVN since the previous build
[QG_LOCALIZATION_STAGING] $ ant -DLOCALE=en_US -DBROWSER=IE -DENVIRONMENT=QA1 -DSUITE=STAGING RunTestNGSuite
FATAL: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?
java.io.IOException: Cannot run program "ant" (in directory "/Users/uselvvi/jenkins/workspace/QG_LOCALIZATION_STAGING"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
at hudson.Proc$LocalProc.<init>(Proc.java:244)
at hudson.Proc$LocalProc.<init>(Proc.java:216)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:773)
at hudson.Launcher$ProcStarter.start(Launcher.java:353)
at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:998)
at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:965)
at hudson.remoting.UserRequest.perform(UserRequest.java:118)
at hudson.remoting.UserRequest.perform(UserRequest.java:48)
at hudson.remoting.Request$2.run(Request.java:328)
at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at hudson.remoting.Engine$1$1.run(Engine.java:63)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:185)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
... 15 more
Build step 'Invoke Ant' marked build as failure
Archiving artifacts
Finished: FAILURE
编辑:我使用'调用ANT'。相同的设置在windows slave中工作良好。
好的,这就是我要做的。
即使在确保PATH, ANT_HOME设置正确之后,我也无法使我的默认ANT与Jenkins一起工作。我想使用"调用蚂蚁"。但是,'Execute shell'方法在从属机中成功地调用了默认的Ant。
然后,我必须使用Jenkins中的"自动安装"选项来下载并在MAC slave中安装Ant以运行目标。
虽然我的问题解决了,我仍然很好奇为什么默认不工作与选项"调用蚂蚁"。如果有人知道,请澄清一下。
谢谢大家。
"自动安装"的另一个替代方法是在从属节点的配置屏幕中使用Node Properties/Tools Locations选项。
如果你选择工具位置,你会看到你得到一个"工具位置列表"的选项
有一个组合框,应该列出所有的工具,你的詹金斯奴隶可能使用。
对于我来说,我必须指定ant, maven和jdk的安装位置:例如
Name: Maven-3.0.4
Home: C:apache-maven-3.0.4
单击add可以在从属服务器上添加其他位置,如JDK/ant等。
我遇到了一个问题,我正在调用基于某些条件的自定义脚本,其中包含ant命令。我尝试了从各种SO和其他网站找到的所有东西,但我仍然在控制台中留下了可怕的"ant: command not found"输出。
由于我的脚本是基于不同的条件,我需要通过shell执行,而不是'Invoke Ant' Jenkins选项。
通过shell导出Ant位置最终使Ant被Jenkins识别,并添加了以下内容:
#bin/sh
export ANT_HOME=/your/path/apache-ant
export PATH=${PATH}:${ANT_HOME}/bin
我尝试了很多不同的解决方案列出,这是唯一的解决方案,为我工作,通过"执行shell"。由于某些原因,所有通过Jenkins->Manage Jenkins->Configuration的配置都没有解决这个问题。
我能够通过@Vinoth S获得"调用蚂蚁"选项,但需要一些更定制的东西。
为了让我的Mac更容易使用第三方工具(比如Ant),我做了几件事:
首先,我设置/etc/paths
包括/usr/local/bin
:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
这意味着每个用户将自动将/usr/local/bin
设置为所有用户的PATH
的一部分。通过将/usr/local/bin
添加到PATH
的前面,我可以覆盖命令的默认版本:
$ /usr/bin/svn --version | head -1 # Default for Mac
svn, version 1.7.17 (r1591372)
$ /usr/local/bin/svn --version | head -1 # Newer version I added
svn, version 1.8.10 (r1615264)
$ svn --version | head -1 # The default one used
svn, version 1.8.10 (r1615264)
现在,我使用ln -s
将我要执行的每个程序链接到/usr/local/bin
:
$ ls -l /usr/local/bin/ant
lrwxr-xr-x 1 root wheel 29 Sep 3 14:27 /usr/local/bin/ant -> /opt/apache-ant/1.9.4/bin/ant
如您所见,所有用户现在都可以执行ant
,而不必修改他们的PATH
。
对于Jenkins Slaves,你没有配置每个工具的确切位置吗?
创建从属时,有一个工具位置复选框。您在Jenkins Configure System页面中定义的每个工具可以为该工具提供实际的PATH。请注意,(默认)不是其中之一,因此您必须定义不使用该工具的(默认)版本的作业。
我在Windows 7的虚拟机上运行Jenkins slave时遇到了同样的问题。它找不到环境变量。我通过Jenkins项目页面上的启动按钮启动JNLP,这导致了这个问题。后来,我将agent.jar文件重新定位到我的桌面,以便从那里测试执行,这可能会消除临时文件夹可能存在的任何r/w问题。我用这个命令启动它:
java -jar agent.jar -jnlpUrl http://your_ip_address_here:8080/computer/Win7/slave-agent.jnlp -secret your_secret_key_here -workDir "C:DataJenkins"
这已经解决了我的问题,这表明某种类型的如果r/w的权利问题,当通过web浏览器启动