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

时间:2016-04-06 21:59:47

标签: linux jenkins ant permissions composer-php

在我的build.xml我定义了一些工作,应由工具执行,installed globally通过Composer。这意味着,二进制文件存储在/root/.composer/vendor/bin/(我在我的本地VM上工作为root)。

我在作曲家配置中设置了PATH环境变量(没有它,构建过程是failing):

enter image description here

现在构建过程正在权限问题中运行:

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
...

我已经安装了Authorize Project plugin并尝试运行构建"作为触发构建"的用户,但它没有帮助。

enter image description here

但这似乎还不够。

如何解决这些权限问题并让Jenkins使用global安装的Composer软件包的二进制文件?

2 个答案:

答案 0 :(得分:0)

可执行文件不是可执行文件,而是另一个文件的符号链接,并且THOSE权限需要正确。你检查过了吗?

答案 1 :(得分:0)

似乎不可能从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
...

然后需要在Jenkins配置(PATH)到Manage Jenkins -> Configure System -> Global properties -> Environment variables中设置$PATH:$COMPOSER_HOME/vendor/bin/个环境变量:

Jankins-settings-PATH