Jenkins使用FTP上传文件报错问题处理

Jenkins带有Publish over FTP插件,可用于构建后发包。但使用中可能遇到问题,一是不支持中文目录,可在系统设置中设置编码为UTF - 8;二是不支持FTP被动模式(PASV),可在服务端开启PASV模式或改变Jenkins连接模式为PORT主动模式。

Jenkins带有Publish over FTP插件,安装后并使用它就能实现FTP上传,可以用于构建后的发包操作。我们在系统管理中配置好FTP Servers后,并测试连接通过,按理在Job配置中用Publish over FTP按官网的配置说明进行配置(Publish Over FTP Plugin),构建后就能正常上传文件。可是我们可能会遇到以后问题:

问题一:不支持中文目录

报错如下:

关看报错提示一般人打死都想不到是中文目录引起的,如果知道其实解决起来很容易,做如下配置:

【系统管理】->【系统设置】->【Publish over FTP】->高级:【Control encoding】->输入【UTF-8】或者【GB2312】

虽然Jenkins说明中推荐中文配置为GB2312,但其实我们一般通用的作法是设置为UTF-8,兼容各类操作系统和构建环境。

问题二:不支持FTP被动模式(PASV)

报错如下:

 上网查有关FTP报502 Command not implemented错误,可能都会说到要开启FTP被动(PASV)模式,那解决方法就有两种了,一种是在FTP服务端开启PASV被动模式(一般默认两种模式都开启了,但不排除没有开启的情况,就导致这个问题)。我们通过FlashFXP工具去连接FTP服务器,也能看出是否开启了PASV模式:

可以看出FTP客户端默认都是用PASV模式去连接服务端,如果连接失败后会自动转为PORT主动模式,说明我们的Jenkins不会自动去转换连接模式,所以导致了上传文件报502错误。 

所以,另一种方式就是改变Jenkins的连接模式,通过官网也能找到这一段话:

Use active data mode
By default passive mode will be used to connect to the FTP Server.
In passive mode the client initiates all connections which will allow the client to send files through a firewall that has been configured to refuse all inbound connections (and does not create dynamic rules).
If you want to dissable passive mode, and have the client use PORT commands for the server to connect to the client to retieve the files, then you can check this box.

 从这段话可以看出,我们是需要自己设置连接模式的(默认是PASV模式,至于PORT与PASV两种模式的区别,可以上网百度),配置如下:

系统管理】->【系统设置】->【Publish over FTP】->高级:勾选【Use active data mode】

保存设置后,再次构建项目,就能看到FTP上传成功了!

 

使用 Jenkins 的 `sshPublisher` 插件上传文件时出现失败,可能的原因包括文件路径配置错误、权限问题、SSH 连接配置不当、目标服务器存储空间不足,或者 Jenkins 工作空间中文件未正确生成或同步。以下是一些常见的排查方向和解决方案: ### 1. 检查文件路径配置 确保在 `sshPublisher` 插件配置中指定的本地文件路径是正确的。Jenkins 默认会在其工作空间目录(如 `/Users/Shared/Jenkins/Home/workspace/VRDungeons`)中查找文件[^1]。如果文件未生成或路径拼写错误,上传将失败。 ### 2. 验证 SSH 连接 确保 Jenkins 服务器能够通过 SSH 成功连接到目标服务器。可以在 Jenkins 的系统设置中测试 SSH 配置,或在命令行中手动测试 SSH 连接: ```bash ssh user@remote-server ``` 如果连接失败,检查 SSH 密钥、用户名、IP 地址和端口是否正确。 ### 3. 检查文件权限 确保 Jenkins 有权限读取本地文件,并且远程服务器上的目标目录允许写入。可以使用以下命令修改本地文件权限: ```bash chmod 644 /path/to/local/file ``` 在远程服务器上,确保目标目录的权限允许 Jenkins 用户写入。 ### 4. 查看 Jenkins 构建日志 构建日志通常会提供上传失败的具体原因。例如,可能会显示“File not found”或“Permission denied”。仔细检查日志内容有助于快速定位问题。 ### 5. 确保文件确实存在于 Jenkins 工作空间 有时文件生成步骤失败或未执行,导致文件不存在。可以在 Jenkins 的构建脚本中添加验证步骤,例如: ```bash ls -la ${WORKSPACE} ``` 确认所需文件确实存在于工作空间中。 ### 6. 检查磁盘空间 如果远程服务器磁盘空间不足,文件上传也会失败。可以使用以下命令检查远程服务器的磁盘使用情况: ```bash df -h ``` ### 7. 配置 `sshPublisher` 插件 确保 `sshPublisher` 插件的配置正确。示例配置如下: ```groovy post { success { sshPublisher( publishers: [ sshPublisherDesc( configName: 'your-ssh-config', transfers: [ sshTransfer( sourceFiles: 'path/to/local/file', removePrefix: 'path/to', remoteDirectory: '/remote/target/directory' ) ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true ) ] ) } } ``` 确保 `sourceFiles` 和 `remoteDirectory` 设置正确。 ### 8. 检查 Jenkins 用户权限 确保 Jenkins 用户在远程服务器上有足够的权限进行文件写入操作。可以尝试以 Jenkins 用户身份登录远程服务器并手动创建文件进行测试。 ### 9. 使用 `verbose` 模式 启用 `sshPublisher` 插件的 `verbose` 模式,可以获得更多详细的日志输出,有助于问题排查。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smooth00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值