如何让Jenkins使用根用户的子文件夹中的二进制文件?

在我的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/

Jankins的设置路径