Jenkins Docker插件默认挂载工作空间的原因及禁用方法
Jenkins Docker容器默认挂载工作空间的原因及禁用方法
为什么会默认挂载工作空间?
Jenkins的Docker Pipeline插件(docker-workflow)会自动将当前Job的工作空间(比如你的/home/jenkins/workspace/kevin)挂载到容器内的相同路径,核心目的是:
- 让容器内执行的Pipeline步骤能直接访问工作空间中的代码、构建脚本、中间产物等,无需手动配置文件传递,简化构建流程
- 保持宿主机与容器间的文件状态同步,方便后续步骤复用构建结果
挂载参数中的:z是SELinux安全上下文标记,当宿主机开启SELinux时,它会调整挂载目录的安全策略,确保容器进程拥有读写该目录的权限,避免出现权限拒绝的报错。
如何禁用默认挂载?
有两种可靠的方式可以取消这个默认挂载:
方法一:覆盖默认挂载规则
在inside()方法的参数中,添加-v /dev/null:/home/jenkins/workspace/kevin,用空设备/dev/null替换默认的工作空间挂载,容器内就无法访问宿主机的工作空间了:
image.inside('-v /build:/build:rw -v /dev/null:/home/jenkins/workspace/kevin') { body() }
如果需要通用适配不同Job的工作空间,可以用环境变量${env.WORKSPACE}代替固定路径:
image.inside("-v /build:/build:rw -v /dev/null:${env.WORKSPACE}") { body() }
方法二:使用插件专属选项(适用于新版本)
如果你使用的是较新版本的docker-workflow插件,可以直接调用noWorkspace()方法禁用默认挂载,写法更简洁:
image.inside('-v /build:/build:rw').noWorkspace() { body() }
内容的提问来源于stack exchange,提问作者Kevin Nammour
相关产品推荐
相关产品推荐

