Macos Jenkins无法在MAC Slave中调用ANT

Macos Jenkins无法在MAC Slave中调用ANT,macos,ant,jenkins,Macos,Ant,Jenkins,Jenkins master正在Windows上运行。我使用java webstart连接了一个MAC作为jenkins slave。我已经在从机(MAC)中安装了ANT,并相应地更新了路径。我能够在从机本地运行ant程序 当我从jenkins运行作业时,它没有调用ant,并且失败了,错误如下。 请澄清 Building remotely on QAXXX in workspace /Users/uselvvi/jenkins/workspace/QG_LOCALIZATION_STAGING

Jenkins master正在Windows上运行。我使用java webstart连接了一个MAC作为jenkins slave。我已经在从机(MAC)中安装了ANT,并相应地更新了路径。我能够在从机本地运行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
在workspace/Users/uselvvi/jenkins/workspace/QG_LOCALIZATION_STAGING中远程构建QAXX
清理/Users/uselvvi/jenkins/workspace/QG\u本地化\u登台/。
更新https:///SVN 修订版“2014-03-24T15:55:41.180-0500”
第1196次修订
没有变化https:///SVN 自上次构建以来
[QG_本地化_登台]$ant-DLOCALE=en_US-DBROWSER=IE-DENVIRONMENT=QA1-DSUITE=STAGING RunTestNGSuite
致命:命令执行失败。可能需要配置作业以选择一个Ant安装?
java.io.IOException:无法运行程序“ant”(在目录“/Users/uselvvi/jenkins/workspace/QG_本地化_STAGING”):错误=2,没有这样的文件或目录
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1042)
位于hudson.Proc$LocalProc(Proc.java:244)
在hudson.Proc$LocalProc.(Proc.java:216)
位于hudson.Launcher$LocalLauncher.launch(Launcher.java:773)
位于hudson.Launcher$ProcStarter.start(Launcher.java:353)
在hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:998)
在hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:965)
在hudson.remoting.UserRequest.perform(UserRequest.java:118)
在hudson.remoting.UserRequest.perform(UserRequest.java:48)
在hudson.remoting.Request$2.run(Request.java:328)
在hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
在hudson.remoting.Engine$1$1.run(Engine.java:63)
运行(Thread.java:744)
原因:java.io.IOException:error=2,没有这样的文件或目录
位于java.lang.UNIXProcess.forkAndExec(本机方法)
位于java.lang.UNIXProcess(UNIXProcess.java:185)
在java.lang.ProcessImpl.start(ProcessImpl.java:134)处
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1023)
... 还有15个
生成步骤“调用Ant”将生成标记为失败
归档工件
完成:失败

编辑:我正在使用“调用ANT”。同样的设置在windows slave中运行良好

好吧,这就是我要做的

即使在确保路径、ANT_HOME设置正确后,我也无法让我的默认ANT与Jenkins一起工作。我想使用“调用Ant”。然而,“executeshell”方法在从机中成功地调用了默认的Ant

然后,我不得不使用Jenkins中的“自动安装”选项下载Ant并在MAC slave中安装Ant以运行目标。现在很好用

即使我的问题得到解决,我仍然很好奇为什么默认设置不能与“invokeant”选项一起使用。你们知道的任何人,请澄清

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
谢谢大家

另一种“自动安装”的替代方法是在从属节点的配置屏幕中使用节点属性/工具位置选项

如果勾选刀具位置,您将看到“刀具位置列表”选项

有一个组合框,其中应该列出Jenkins slave可能使用的所有工具

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


单击add(添加)可以添加其他内容,如JDK/ant等。从机上的位置

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

因为我的脚本基于不同的条件,所以我需要通过shell而不是“invokeant”Jenkins选项来执行

通过shell导出Ant位置最终让Jenkins识别Ant,并添加以下内容:

#bin/sh

export ANT_HOME=/your/path/apache-ant
export PATH=${PATH}:${ANT_HOME}/bin
我尝试了列出的许多不同的解决方案,这是唯一通过“执行shell”对我有效的解决方案。由于某种原因,所有通过Jenkins->Manage Jenkins->Configuration进行的配置都没有解决该问题


我能够通过@Vinoth S使用“Invoke ant”选项,但是需要一些更定制的东西

为了在我的Mac上更方便地使用第三方软件(如Ant),我做了几件事:

首先,我将
/etc/path
设置为包含
/usr/local/bin

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
$ 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
这意味着每个用户将自动设置
/usr/local/bin
作为所有用户
路径的一部分。通过将
/usr/local/bin
添加到
路径的前面,我可以覆盖命令的默认版本:

$ /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

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
$ 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
,而无需修改其
路径

至于詹金斯奴隶,你不配置每个工具的确切位置吗


创建从属时,会有一个“工具位置”复选框。您在Jenkins配置系统页面中定义的每个工具都可以获得该工具的实际路径。请注意,(默认)不是其中之一,因此您必须定义作业,才能不使用该工具的(默认)版本。这是路径中的一个。

我在虚拟机中运行Windows 7上的Jenkins从机时遇到了同样的问题。它找不到环境变量。我通过Jenkins项目页面上的启动按钮启动了JNLP,这导致了这个问题。后来,我将agent.jar文件重新定位到我的桌面上,以便从那里测试执行,这可能会导致