我无法让 Jenkins 写入目录,但是我相信我已经设置了正确的权限。Jenkins 由一个名为“jenkins”的用户运行,该用户属于一个名为“jenkins-group”的组。当我ll
:
drwxrwxr-x 2 jenkins-group jenkins-group 68 Sep 3 13:01 test_save_data_jenkins_R
我遵循以下链接中推荐的方法,通过创建一个具有“rwx”权限的组并将运行 Jenkins 的用户添加到该组。如何正确允许用户 jenkins 写入用户 minecraft 主目录下的特定目录?.
所以我给了组“jenkins-group”rwx权限,这反过来也应该给用户“jenkins”这些权限,因为它有这个组作为辅助。当我从终端登录到用户“jenkins”时,我可以使用touch test.txt
. 但是,当我在执行 shell 中使用以下命令从 Jenkins 运行构建时:
cd /apps/models/test_save_data_jenkins_R && whoami && touch test.txt
我收到以下错误:
+ cd /apps/models/test_save_data_jenkins_R
+ whoami
jenkins
+ touch test.txt
touch: cannot touch ‘test.txt’: Permission denied
Build step 'Execute shell' marked build as failure
Finished: FAILURE
请注意,组“jenkins-group”也对文件夹“apps”和“models”具有 rwx 权限。我尝试使用以下命令授予用户“jenkins”直接权限:
$ setfacl -Rm user:jenkins:rwx /apps/models/test_save_data_jenkins_R/
这将导致脚本成功运行。然而,这确实是一种解决方法,我想了解我在以前的方法中做错了什么。
更新#1
运行groups jenkins
:
jenkins : jenkins jenkins-group
运行getfacl
返回:
# file: test_save_data_jenkins_R/
# owner: jenkins-group
# group: jenkins-group
user::rwx
group::rwx
other::r-x
更新#2
在 jenkins 脚本中运行 /usr/bin/id 给出:
+ /usr/bin/id
uid=775(jenkins) gid=895(jenkins) groups=895(jenkins)
从终端运行 /usr/bin/id 给出:
uid=775(jenkins) gid=895(jenkins) groups=895(jenkins),1012(jenkins-group)
请注意,在运行 jenkins 服务的 safeRestart 后也会发生这种情况。
问题是直到我重新启动詹金斯服务后才反映用户权限。我在 red hat linux 机器上通过键入: