如何在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,再在目标节点拉取:
- 安装Copy Artifact插件
- 修改流水线:
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
相关产品推荐
相关产品推荐

