Jenkins创建任务时配置任务文件夹所属用户组的方法咨询
解决方案
方案1:调整Authorize User插件的默认运行身份配置(优先推荐)
- 进入Jenkins全局安全配置页面,找到Access Control for Builds模块
- 选择
Run as the user who triggered the build选项,同时勾选Apply file system permission for builds run as the triggering user(部分版本翻译为「为触发用户运行的构建应用文件系统权限」) - 保存配置后,后续触发构建生成的
$JENKINS_HOME/jobs/下子目录,属主会自动设为触发构建的操作用户,属组默认继承父目录的组权限 - 提前给不同租户组的父文件夹设置正确的属组,再开启组继承权限,就能保证同组用户可以访问本组目录下的任务,跨组无任何访问权限
方案2:配置Jenkins内置参数+监听脚本(适合旧版本不支持插件上述选项的场景)
- 编辑Jenkins启动配置文件(通常为
/etc/sysconfig/jenkins或者/etc/default/jenkins,根据安装方式不同路径存在差异) - 修改
JENKINS_JAVA_OPTIONS参数,添加以下配置项:
上述umask值可按需调整,0027代表属主有读写执行权限、属组有读执行权限、其他用户无任何权限,符合多租户权限隔离要求-Djenkins.security.FileSystemAccessRule.defaultUmask=0027 - 搭配
inotifywait监听脚本实现自动修正权限:监听$JENKINS_HOME/jobs/目录的创建事件,新目录生成后自动根据父目录的属主属组修正子目录权限,脚本参考如下:
将脚本配置为系统服务开机自启即可生效#!/bin/bash inotifywait -m -r -e create --format '%w%f' "$JENKINS_HOME/jobs/" | while read NEWFILE do if [ -d "$NEWFILE" ]; then PARENT_DIR=$(dirname "$NEWFILE") # 继承父目录的属主属组和权限规则 chown --reference="$PARENT_DIR" "$NEWFILE" chmod --reference="$PARENT_DIR" "$NEWFILE" fi done
注意事项
- 调整配置前建议先完整备份
$JENKINS_HOME/jobs/目录下的所有文件,避免权限配置错误导致现有任务无法访问 - 如果搭配CloudBees Folders插件做租户目录隔离,可以直接在文件夹的权限配置页给对应租户组分配Job/Create、Job/Read权限,结合上述文件系统权限配置,就能完全实现目录级别的租户隔离,全程不需要操作SYSTEM用户组相关配置
内容的提问来源于stack exchange,提问作者Spence
相关产品推荐
相关产品推荐

