如何实现从远程机器向Jenkins工作区传输文件?
解决Jenkins从远程机器拉取文件到工作区的问题
别担心,你没遗漏核心逻辑,但确实有几个实用方案能搞定这种反向传输需求,我给你梳理两个最靠谱的:
方案1:用Publish Over SSH插件的「拉取文件」功能
你说得对,Publish Over SSH默认是往远程推文件,但其实它自带了拉取文件的隐藏能力,可能你没留意到。配置步骤很简单:
- 进入Jenkins项目配置页,添加「Publish over SSH」构建步骤
- 选择「Retrieve files」选项(而非默认的Send files)
- 填写远程机器的文件路径(比如
/remote/path/to/files/*),以及Jenkins工作区的目标路径(比如${WORKSPACE}/downloaded_files/) - 确保已经在Jenkins的SSH服务器配置里,完成了远程机器的公钥-私钥认证配置
这个方法不用写脚本,可视化操作就能搞定,适合不想折腾命令行的场景。
方案2:Shell脚本结合SSH Agent插件(更灵活)
如果需要定制化的传输逻辑,用Shell脚本搭配SSH Agent插件是绝佳选择——毕竟你已经有公钥-私钥认证基础了:
- 先安装「SSH Agent」插件,它能帮你安全管理Jenkins中的私钥,不用把密钥硬编码到脚本里
- 在项目构建步骤中添加「SSH Agent」,选择对应远程机器的私钥
- 在SSH Agent的嵌套步骤里添加「Execute shell」,用
scp或rsync拉取文件:- 用scp的示例命令:
scp -r user@remote-host:/remote/path/to/files/* ${WORKSPACE}/target/ - 如果文件量大或需要增量同步,rsync更高效:
rsync -avz user@remote-host:/remote/path/to/files/ ${WORKSPACE}/target/
- 用scp的示例命令:
这里要注意:${WORKSPACE}是Jenkins内置环境变量,直接指向当前项目的工作区路径,不用手动写死路径。
额外小提醒
- 确保Jenkins运行用户(比如
jenkins)的公钥已经添加到远程机器的~/.ssh/authorized_keys中,这样密钥认证才能正常生效 - 如果是Jenkins Agent节点执行构建,要确保Agent机器也配置好对应SSH密钥,或者通过SSH Agent插件把密钥同步到Agent节点上
内容的提问来源于stack exchange,提问作者romawu
相关产品推荐
相关产品推荐

