Jenkins External Workspace Manager插件主从节点工作区共享失败排查
Jenkins External Workspace Manager主从节点工作区共享问题解决
问题核心原因
你遇到的问题本质是主从节点的"共享工作区"并非真正的共享存储。从日志可见,master节点在本地路径/var/jenkins_home/jenkins-project/disk1/external-workspace/...下完成了代码克隆和构建,但agent-one节点的同路径只是本地空目录——两者没有共用底层共享存储。External Workspace Manager插件仅负责分配统一的路径标识,不自动同步文件,必须依赖主从节点挂载同一个共享存储(如NFS、SMB)到相同绝对路径。
配置修复步骤
部署共享存储
在主节点和agent-one节点上挂载同一个网络共享存储(比如NFS服务器),确保挂载点完全一致,例如都挂载到/var/jenkins-shared-workspace。更新External Workspace Manager配置
- 进入Jenkins全局配置,找到External Workspace Manager的磁盘池设置;
- 修改
disk1的路径为共享存储挂载点下的目录,比如/var/jenkins-shared-workspace/disk1/external-workspace; - 检查agent-one节点的配置,确认节点级的External Workspace磁盘定义与全局配置一致,指向同一个共享路径。
验证共享有效性
在master节点的共享路径下创建测试文件,登录agent-one节点检查该文件是否存在,确保存储共享生效。
修改后的Pipeline脚本(同时修复deprecated的stage写法)
pipeline { agent none stages { stage('Allocate workspace') { steps { script { extWorkspace = exwsAllocate diskPoolId: 'diskpool1' } } } stage('Build on master') { agent { label 'master' } steps { exws(extWorkspace) { git url: 'https://github.com/alexsomai/dummy-hello-world.git' def mvnHome = tool 'M3' sh "${mvnHome}/bin/mvn clean install -DskipTests" sh 'ls -la' // 验证构建产物存在 } } } stage('Run tests on agent-one') { agent { label 'agent-one' } steps { exws(extWorkspace) { sh 'ls -la' // 验证共享目录内容是否同步 def mvnHome = tool 'M3' sh "${mvnHome}/bin/mvn test" } } } } }
替代方案(无共享存储时)
如果无法部署共享存储,可改用stash/unstash机制在节点间传递构建产物(适合小项目),示例如下:
pipeline { agent none stages { stage('Build on master') { agent { label 'master' } steps { git url: 'https://github.com/alexsomai/dummy-hello-world.git' def mvnHome = tool 'M3' sh "${mvnHome}/bin/mvn clean install -DskipTests" stash includes: '**/*', name: 'build-artifacts' } } stage('Run tests on agent-one') { agent { label 'agent-one' } steps { unstash 'build-artifacts' def mvnHome = tool 'M3' sh "${mvnHome}/bin/mvn test" } } } }
内容的提问来源于stack exchange,提问作者iwantanswer
相关产品推荐
相关产品推荐

