Jenkins脚本生成文件无法通过Publish Over SSH插件传输问题咨询
解决Jenkins Publish Over SSH插件无法识别绝对路径的问题
我之前也踩过这个坑!Publish Over SSH插件默认是从Jenkins构建工作区下查找文件的,你直接填绝对路径的话,插件会自动把你输入的路径拼到工作区路径后面,自然找不到目标文件。下面给你几个可行的解决思路:
方法1:将文件复制到构建工作区(最通用)
在Publish Over SSH任务之前,添加一个执行命令的步骤(Linux用Execute shell,Windows用Execute Windows batch command),把脚本生成的文件复制到当前构建的工作区中。比如:
# Linux系统示例:复制指定路径下的所有生成文件到工作区 cp /your/absolute/path/generated-files/* ${WORKSPACE}/
之后在Publish Over SSH的「Source files」里直接填写文件名或相对路径(比如generated-file-*.tar.gz)就可以正常识别了。
方法2:全局开启绝对路径支持(需管理员权限)
如果你的Jenkins有管理员权限,可以修改插件的全局配置,允许使用绝对路径:
- 进入「Manage Jenkins」→「Configure System」
- 找到「Publish over SSH」配置区域,展开「Advanced」选项
- 勾选「Use absolute paths」
这样之后,你在SSH任务的「Source files」中直接填写文件的绝对路径就可以生效了。注意这是全局设置,会影响所有使用该插件的任务,共享服务器下建议先和管理员沟通。
方法3:修改脚本输出路径到工作区
如果脚本可以修改的话,直接让脚本把生成的文件输出到Jenkins构建工作区里。脚本中可以直接引用Jenkins的WORKSPACE环境变量,比如:
# 在脚本中设置输出目录为工作区下的子目录 OUTPUT_DIR="${WORKSPACE}/build-output" mkdir -p ${OUTPUT_DIR} # 后续生成文件的逻辑都输出到这个目录
这样后续SSH任务直接用相对路径build-output/*就能读取到文件,无需额外操作。
额外注意事项
- 确保Jenkins运行用户(通常是
jenkins用户)拥有读取脚本生成文件路径的权限,否则复制或直接读取都会失败 - 多目标主机的场景下,以上方法都适用,只要源文件路径处理正确,插件会自动同步到所有配置的主机
内容的提问来源于stack exchange,提问作者amphibient
相关产品推荐
相关产品推荐

