You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins External Workspace Manager插件主从节点工作区共享失败排查

Jenkins External Workspace Manager主从节点工作区共享问题解决

问题核心原因

你遇到的问题本质是主从节点的"共享工作区"并非真正的共享存储。从日志可见,master节点在本地路径/var/jenkins_home/jenkins-project/disk1/external-workspace/...下完成了代码克隆和构建,但agent-one节点的同路径只是本地空目录——两者没有共用底层共享存储。External Workspace Manager插件仅负责分配统一的路径标识,不自动同步文件,必须依赖主从节点挂载同一个共享存储(如NFS、SMB)到相同绝对路径。

配置修复步骤

  1. 部署共享存储
    在主节点和agent-one节点上挂载同一个网络共享存储(比如NFS服务器),确保挂载点完全一致,例如都挂载到/var/jenkins-shared-workspace。

  2. 更新External Workspace Manager配置

    • 进入Jenkins全局配置,找到External Workspace Manager的磁盘池设置;
    • 修改disk1的路径为共享存储挂载点下的目录,比如/var/jenkins-shared-workspace/disk1/external-workspace;
    • 检查agent-one节点的配置,确认节点级的External Workspace磁盘定义与全局配置一致,指向同一个共享路径。
  3. 验证共享有效性
    在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:53:11