Jenkins无法运行程序“phing” - Phing命令执行失败

时间:2014-03-04 18:30:28

标签: jenkins continuous-integration phing

我是jenkins和phing的新手,并且看起来像jenkins无法运行我的phing命令的基本错误。我失败的构建的控制台日志如下。我只有一个phing安装所以我明白我不需要“配置工作来选择一个”,我也尝试在我的jenkins全局环境变量中添加一个PATH并在添加变量后重新启动Jenkins但仍然没有走。我已经在我的本地路径中使用了Phing,因为我可以在任何地方调用phing命令。我也能够调用jenkins从终端执行的相同的phing命令,并且构建完成。但是,Jenkins的Build Now总是失败。任何帮助都会很棒!谢谢:))

Started by user anonymous

Building in workspace /Users/Shared/Jenkins/Home/jobs/php-template/workspace

Fetching changes from the remote Git repository

Fetching upstream changes from ssh://git@mystash.server:7999/myproject/myrepo.git

Checking out Revision 8fb6f843d6fd232cdde1684e18c455cef6f20460 (origin/master)
looking for '/Users/Shared/Jenkins/Home/jobs/php-template/workspace/build.xml' ... 

use '/Users/Shared/Jenkins/Home/jobs/php-template/workspace' as a working directory. 

[workspace]    
$ phing -buildfile /Users/Shared/Jenkins/Home/jobs/php-template/workspace/build.xml clean try_ParallelTasks -logger phing.listener.DefaultLogger

FATAL: command execution failed.Maybe you need to configure the job to choose one of your Phing installations?
java.io.IOException: Cannot run program "phing" (in directory "/Users/Shared/Jenkins/Home/jobs/php-template/workspace"): error=2, No such file or directory

    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
    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$ProcStarter.join(Launcher.java:360)
    at hudson.plugins.phing.PhingBuilder.perform(PhingBuilder.java:215)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:804)
    at hudson.model.Build$BuildExecution.build(Build.java:199)
    at hudson.model.Build$BuildExecution.doRun(Build.java:160)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:585)
    at hudson.model.Run.execute(Run.java:1670)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:231)
        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:135)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
    ... 15 more
Build step 'Invoke Phing targets' marked build as failure

3 个答案:

答案 0 :(得分:1)

更清楚的是,正如Cweiske所指出的那样,Jenkins无法构建,因为它无法找到正确的phing可执行文件,因为它在错误的路径(工作区中的那个)中查找它。

无论如何,Jenkins也会在其他路径中搜索该可执行文件,就像你引用的那样:“在我的本地路径中,因为我可以在任何地方调用phing命令”。

你的本地路径的问题在于它是你的,而不是Jenkin的。由于Jenkins使用自己的用户(jenkins,在安装过程中创建)在Mac上运行,因此无法使用您的本地路径。

理解这个问题,有多种可能的解决方案(我已经逐一尝试过它们但没有成功!),但更简单(最终有效的那个!)就是“符号化”。

注意:请注意Mac上各种类型“链接”之间的区别:SymLinks不同,不等于别名或硬链接(http://macs.about.com/od/faq1/f/What-Are-Aliases-Symbolic-Links-And-Hard-Links-In-Mac-Os-X.htm)。

回来,就像在usr / bin文件夹中那样,mac上的每个用户都可以使用可执行文件,让我们创建一个符号链接到这个文件夹到你每次使用的可执行文件,包括一个在您的本地路径中的文件夹中。

从终端,转到usr / bin文件夹。使用命令“cd”更改当前目录并转到根目录的顶部使用类似:

> cd ../

使用命令“pwd”,您可以看到当前所在目录的完整路径,使用“ls”命令可以列出其中的所有文件和文件夹:使用它们引导自己进入文件夹树。

因此,假设您已经在usr / bin文件夹中并假设您使用MAMP作为网络服务器,命令为:

> ln /Applications/MAMP/bin/php/php5.5.10/bin/phing ./phing

如您所见,第一个参数是您想要符号链接的可执行文件的路径,第二个参数是您要在其中创建符号链接的文件夹的路径。不要忘记附加新符号链接的名称!

完成后,再次尝试使用Jenkins构建:现在一切都应该运行良好...我希望!

一些疑难解答:

1)您在错误的文件夹中创建了符号链接:使用“rm”删除文件

2)您没有正确的权限:使用“sudo”充当超级管理员

> sudo ln /Applications/MAMP/bin/php/php5.5.10/bin/phing ./phing

答案 1 :(得分:0)

安装phing脚本的目录不在jenkins用户的$PATH中。

将它符号链接到/ usr / bin /,你应该设置它。

答案 2 :(得分:0)

来自以下错误消息

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:248) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)

我得到了这个&#34; IOException when starting a process&#34;

似乎ProcessBuilder没有使用env变量PATH,因此无法找到find phing

我做的是删除了Invoke Phing targets并添加了构建为Execute Shell,并在Command中添加了/usr/local/bin/phing。这对我有用。