一、错误说明
- 使用ftp上传文件
ERROR: Exception when publishing, exception message [Could not write file. Server message: [553 Could not create file.]]
11:12:45 FTP: Connecting from host [test-xxx-java-user-service-3-932ft-hsb69-t5wmf]
11:12:45 FTP: Connecting with configuration [ftp_java_test] ...
11:12:45 FTP: Disconnecting configuration [ftp_java_test] ...
- 错误分析
jenkinsfile是同一份代码,只是不同的项目而已。
ftp是连接正常的,现在是上传文件出现错误。
所以,我没有去往ftp的配置上考虑。ftp服务器是我们自搭的,模式为被动模式。见ftp配置详情:
点击高级,可以看到,我们并未使用主动模式。
使用Transmit连接ftp也正常,而且目录也已创建。
所以排查了文件目录不存在导致上传文件失败的疑虑。
二、万事不决问chatgpt
我果断把错误详情,一键发送给chatgpt,看看他老人家是如何回复的。
- 1、目标文件夹是否存在
上文已经说明,目标文件夹是存在的。 - 2、磁盘空间
空间杠杠滴,完全满足磁盘存储的需求。 - 3、权限问题
这让我想到了,是不是用户的权限问题了。在jenkins里,上传用户是xxdevuser,而已存在的文件所属用户却是root。见下图:
说到这里,问题就很明显了。
由于在2022年份已上传过了两个文件,所属用户为root,现在却是用户xxdevuser想要覆盖它们。
三、解决报错
问题已经找到了,要解决就容易了。删掉已存在的两个文件,再次Jenkins打包上传文件。
- 当然,你也可以使用ssh进行上传,效果相同。
13:31:04 >>>>>>>>>>upload jar and md5!!!>>>>>>>>>>
[Pipeline] }
13:31:04
[Pipeline] // ansiColor
[Pipeline] withCredentials
13:31:04 Masking supported pattern matches of $identity
[Pipeline] {
[Pipeline] sshCommand
13:31:09 Executing command on ssh[192.168.10.15]: mkdir -p /opt/app/user-service sudo: false
[Pipeline] sshPut
13:31:13 Sending a file/directory to ssh[192.168.10.15]: from: /opt/.m2/java-workspaces/TEST_xxx_java_user-service/user-service/target/user-service.jar into: /opt/app/user-service
13:31:13 Sending a file/directory to ssh[192.168.10.15]: from: /opt/.m2/java-workspaces/TEST_xxx_java_user-service/user-service/target/user-service.jar.md5 into: /opt/app/user-service