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

如何在Jenkins节点间传输大文件并实现跨节点构建测试?

Jenkins流水线跨节点传输大二进制文件解决方案

问题分析

你尝试用External Workspace Manager(EWM)跨节点共享大文件失败,核心原因是EWM依赖共享存储而非自动文件传输:你仅在主节点创建了本地文件夹,两个计算节点的挂载路径指向的是各自本地目录,而非同一个共享存储卷,因此文件无法在节点间同步。

可行解决方案

方案1:修复External Workspace Manager配置

EWM的核心是让所有需要共享文件的节点挂载同一个共享存储(如NFS、SMB、云存储卷),步骤如下:

  • 在主节点将$HOME/jenkins_mountpoint配置为共享存储(比如用NFS导出该目录)
  • 在Compute instance 1和Compute instance 2上,将这个共享存储挂载到本地相同路径(比如/mnt/jenkins_shared)
  • 在Jenkins节点配置中,将两个计算节点的EWM挂载路径设置为上述本地挂载点
  • 验证diskpool1的配置,确保它关联的是这个共享存储资源

修改后的EWM流水线无需调整代码,只要存储挂载正确,文件会自动在节点间共享。

方案2:用rsync/scp直接传输(无共享存储时首选)

通过SSH在节点间直接传输大文件,需提前配置节点间免密登录(将私钥存在Jenkins凭据中):

node("Compute instance 1") {
    stage('Clone') {
        checkout scm
    }
    stage('Run system_info') {
        sh '''#!/bin/bash
            cat /proc/cpuinfo
        '''
    }
    stage('Run configure') {
        CONFIGURE_COMMANDS
    }
    stage('Run build') {
        BUILD_COMMANDS
        // 定义二进制文件路径
        def binaryPath = "./path/to/your/binary"
        // 存储路径到全局变量,供后续节点使用
        env.BINARY_PATH = binaryPath
        env.BINARY_NAME = binaryPath.split('/').last()
    }
}

node('Compute instance 2'){
    stage('Run system_info') {
        sh'''#!/bin/bash
            cat /proc/cpuinfo
        '''
    }
    stage('Transfer binary') {
        // 加载SSH私钥凭据(提前在Jenkins中配置,ID为instance1-ssh-key)
        withCredentials([sshUserPrivateKey(credentialsId: 'instance1-ssh-key', keyFileVariable: 'SSH_KEY')]) {
            // 用rsync传输,比scp更高效,支持断点续传
            sh '''#!/bin/bash
                chmod 600 $SSH_KEY
                rsync -avz -e "ssh -i $SSH_KEY" user@compute-instance-1-ip:$BINARY_PATH ./
            '''
        }
    }
    stage('Run test') {
        sh "./$BINARY_NAME" // 替换为你的测试命令
    }
}

方案3:使用Copy Artifact插件

将构建产物归档为Jenkins构建 artifact,再在目标节点拉取:

  1. 安装Copy Artifact插件
  2. 修改流水线:
node("Compute instance 1") {
    stage('Clone') {
        checkout scm
    }
    stage('Run system_info') {
        sh '''#!/bin/bash
            cat /proc/cpuinfo
        '''
    }
    stage('Run configure') {
        CONFIGURE_COMMANDS
    }
    stage('Run build') {
        BUILD_COMMANDS
        // 归档二进制文件
        archiveArtifacts artifacts: './path/to/your/binary', fingerprint: true
    }
}

node('Compute instance 2'){
    stage('Run system_info') {
        sh'''#!/bin/bash
            cat /proc/cpuinfo
        '''
    }
    stage('Fetch binary') {
        // 拉取当前流水线的构建产物
        copyArtifacts projectName: env.JOB_NAME, selector: specific(env.BUILD_NUMBER)
    }
    stage('Run test') {
        EXECUTION_COMMANDS
    }
}

注意事项

  • rsync/scp方式需确保两个节点的网络互通,且Jenkins用户有权限访问目标节点
  • Copy Artifact插件支持大文件,但需在Jenkins全局配置中调整artifact大小限制
  • EWM方式性能最优,适合频繁跨节点共享大文件的场景

内容的提问来源于stack exchange,提问作者Ali Tariq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:53:11