2014-03-24 80 views
2

Jenkins master正在Windows上運行。我使用java webstart連接了一個MAC作爲jenkins slave。我已經在從站(MAC)中安裝了ANT並相應地更新了PATH。我能夠在奴隸機器上本地運行螞蟻程序。Jenkins無法在MAC Slave中調用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從屬工作正常。

+0

這看起來並不像詹金斯的Ant生成步驟調用。你正在使用**調用Ant ** Jenkins構建步驟,還是使用** Execute Shell **並在那裏輸入「ant」? – Slav

+0

您好,先生,我正在使用invoke ANT – vins

+0

我所能想到的是:確保在您的** Invoke Ant **構建步驟中,您的_Ant Version_被設置爲默認值(這將使用系統中設置的任何值)。另外,我假設,當你說你在本地測試它時,測試是用我在日誌中看到的相同'uselvvi'用戶完成的。 – Slav

回答

0

確定這是我必須做的..

即使確保路徑後,ANT_HOME設置是否正確,我不能讓與詹金斯我的默認ANT工作。我想用'調用Ant'。但是,'Execute shell'方法在子機中成功調用默認的Ant。

然後,我不得不在Jenkins中使用'自動安裝'選項來下載和安裝Ant,以運行目標。現在它工作正常。

雖然我的問題已解決,但我仍然好奇爲什麼默認設置無法使用「調用Ant」選項。你們中的任何人都知道,請澄清。

謝謝大家。

+0

我有同樣的問題,只是無法讓螞蟻與'調用Ant'選項一起工作。但由於本地安裝正確,我可以在shell執行時執行'ant'。 – windmaomao

+0

嗨Vinoth,你可以把這個場景的ur jenkin屏幕截圖。我已經在Execute shell中設置了ant路徑,但仍然需要調用ant來運行ant腳本,但它對我來說不合適。 – Deepak

0

「自動安裝」的另一種替代方法是在您的從屬節點的配置屏幕中使用節點屬性/工具位置選項。

如果你打勾工具位置,你會看到你會得到一個選項來

有一個組合框應該列出了可能會通過您的詹金斯從使用的所有工具「工具的位置列表」。

對我來說,我必須指定ant,maven和jdk的安裝位置:

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

單擊添加允許您添加其他如JDK /螞蟻等對從

0

我也陷入其中,我打電話基於肯定的是,也有內在的螞蟻命令自定義腳本的問題位置條件。我嘗試了從各種SO和其他站點發現的所有內容,但我仍然在控制檯中留下了可怕的「ant:command not found」輸出。

由於我的腳本基於不同的條件,我需要通過shell執行而不是'Invoke Ant'Jenkins選項。

導出通過shell Ant的位置終於得到了螞蟻詹金斯與添加以下認識:

#bin/sh 

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

我嘗試了很多上市不同的解決方案,這是隻有通過爲我工作的解決方案'執行外殼'。由於某些原因,所有通過Jenkins-> Manage Jenkins-> Configuration進行的配置都沒有解決問題。

我能夠通過@Vinoth S獲得「Invoke ant」選項,但需要更多的自定義內容。

+0

我只是更新一些詹金斯的工作,並發現在詹金斯殼怪異的東西。 使用: '出口ANT_HOME = /您/路/ Apache的螞蟻/斌 出口PATH = $ {PATH}:$ {ANT_HOME}' 我從控制檯輸出如下: '錯誤:無法找到或加載主類org.apache.tools.ant.launch.Launcher' 螞蟻對我的作品的唯一方法是通過張貼在我原來的答案代碼。我只是想爲我遇到的新問題添加更多細節。 – Boz

0

有幾件事情我不使用第三方的東西(如螞蟻)在我的Mac容易使:

首先,我設置/etc/paths包括/usr/local/bin

/usr/local/bin 
/usr/bin 
/bin 
/usr/sbin 
/sbin 

這意味着,每個用戶將自動設置/usr/local/bin作爲所有用戶的一部分PATH。通過添加/usr/local/binPATH的面前,我可以覆蓋命令的默認版本:

$ /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中定義的每個工具配置系統頁面可以給出該工具的實際路徑。請注意,(默認)不是其中之一,因此您必須將作業定義爲不使用該工具的(默認)版本。這是PATH中的一個。

+0

謝謝。讓我嘗試一下並讓你知道。 – vins