在我的build.xml
我定义了一些工作,这些工作应该由工具来执行,我通过Composer 安装了global
工具。 这意味着,二进制文件存储在/root/.composer/vendor/bin/
(我在本地虚拟机上以root
身份工作)。
我在composer phpconfiguration中设置了PATH
环境variables(没有它的构build过程失败 ):
现在,构build过程正在运行权限问题:
Started by user anonymous Running as anonymous Building in workspace /path/to/myproject [myproject] $ ant Buildfile: /path/to/myproject/build.xml phpcs: BUILD FAILED /path/to/myproject/build.xml:30: Execute failed: java.io.IOException: Cannot run program "phpcs": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047) ... at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ... 24 more Total time: 0 seconds Build step 'Invoke Ant' marked build as failure Finished: FAILURE
COMPOSER_HOME/bin
中的二进制文件对每个人都是可执行的:
root@ubuntuvm:~# chmod 777 /root/.composer/vendor/bin/ root@ubuntuvm:~# ls -lia /root/.composer/vendor/bin/ total 8 ... 29651 lrwxrwxrwx 1 root root 42 Feb 17 14:49 phpcs -> ../squizlabs/php_codesniffer/scripts/phpcs ...
我已经安装了授权项目插件,并尝试运行构build“作为触发构build的用户”,但它没有帮助。
但是,这似乎还不够。
如何解决这些权限问题并让Jenkins使用global
安装的Composer软件包的二进制文件?
可执行文件不是可执行文件,而是另一个文件的符号链接,而且这些权限必须是正确的。 你检查了吗?
似乎不可能从Jenkins的/由Jenkins执行存储在另一个( root
)用户的子文件夹中的(Composer)二进制文件。
解决方法是,将COMPOSER_HOME
移动到一个文件夹,Jenkins可以访问,例如:
$ mv /root/.composer /usr/share/.composer $ nano /etc/environment ... PATH=... COMPOSER_HOME="/usr/share/.composer" ... $ nano ~/.profile ... export PATH=$PATH:$COMPOSER_HOME/vendor/bin ...
需要设置PATH
环境变量,然后在Jenkins配置( Manage Jenkins -> Configure System -> Global properties -> Environment variables
)中设置为$PATH:$COMPOSER_HOME/vendor/bin/
: