Jenkins无法在MAC Slave中调用ANT

时间:2014-03-24 20:39:13

标签: macos ant jenkins

Jenkins master正在Windows上运行。我使用java webstart将MAC连接为jenkins slave。我已经在从站(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

编辑:我正在使用&#39;调用ANT&#39;。相同的设置在Windows slave中正常工作。

5 个答案:

答案 0 :(得分:0)

好的这就是我必须要做的事情..

即使确保PATH,ANT_HOME设置正确,我也无法使我的默认ANT与Jenkins一起工作。我想使用'Invoke Ant'。但是,'Execute shell'方法在从机中成功调用默认Ant。

然后,我不得不使用Jenkins中的“自动安装”选项在MAC从站中下载并安装Ant来运行目标。现在工作正常。

尽管我的问题已经解决,但我仍然很好奇为什么默认设置不适用于'Invoke Ant'选项。你们任何人都知道,请澄清。

谢谢大家。

答案 1 :(得分:0)

&#34;自动安装&#34;的另一种选择;是在从属节点的配置屏幕中使用节点属性/工具位置选项。

如果勾选工具位置,您会看到一个选项&#34;工具位置列表&#34;

有一个组合框,应该列出Jenkins奴隶可能使用的所有工具。

对我来说,我必须指定ant,maven和jdk安装的位置: e.g。

Name: Maven-3.0.4
Home: C:\apache-maven-3.0.4

单击“添加”可以添加其他内容,例如从属

上的JDK / ant等位置

答案 2 :(得分:0)

我遇到了一个问题,我在这个问题上调用了基于某些条件在其中包含ant命令的自定义脚本。我尝试了从各种SO和其他网站找到的所有东西,但我仍然在控制台中留下了可怕的“ant:command not found”输出。

由于我的脚本基于不同的条件,我需要通过shell而不是'Invoke Ant'Jenkins选项执行。

通过shell导出Ant位置最终得到了Jenkins,并添加了以下内容:

#bin/sh

export ANT_HOME=/your/path/apache-ant
export PATH=${PATH}:${ANT_HOME}/bin

我尝试了很多不同的解决方案,这是唯一通过“执行shell”为我工作的解决方案。所有配置通过Jenkins-&gt; Manage Jenkins-&gt; Configuration都没有解决问题。

我能够通过@Vinoth S获得'Invoke ant'选项,但需要更多定制的东西。

答案 3 :(得分:0)

我在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 配置系统 页面中定义的每个工具都可以获得该工具的实际路径。请注意,(默认)不是其中之一,因此您必须定义作业,而不是使用该工具的(默认)版本。这是PATH中的那个。

答案 4 :(得分:0)

我在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:\Data\Jenkins"

这解决了我的问题,这表明当通过网络浏览器进行推送时,r / w权利是否有问题。