![Jenkins在linux上的写权限](https://linux22.com/image/139528/Jenkins%E5%9C%A8linux%E4%B8%8A%E7%9A%84%E5%86%99%E6%9D%83%E9%99%90.png)
我无法让詹金斯写入目录,但我相信我已经设置了正确的权限。 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 后也会发生这种情况。
答案1
问题是,直到我重新启动詹金斯服务后,用户权限才得到反映。我在 Red Hat Linux 机器上输入:
sudo service jenkins restart