一尘不染

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

jenkins

在我的build.xml我定义了一些工作,应该由工具来执行,我安装global立法院通过作曲。这意味着,二进制文件存储在/root/.composer/vendor/bin/(我在root本地VM上工作)。

我PATH在composer configs中设置了环境变量(没有它,构建过程将失败):

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

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插件,并试图以“触发构建的用户”身份运行该构建,但是并没有帮助。

但这似乎还不够。

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


阅读 286

收藏
2020-07-25

共1个答案

一尘不染

从詹金斯执行/由詹金斯执行存储在另一个(root)用户的子文件夹中的(Composer)二进制文件似乎是不可能的。

一种对我有效的解决方法是将移至 Jenkins可以访问COMPOSER_HOME的文件夹,例如:

$ 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/

2020-07-25