Jenkins Freestyle项目Artifact Deployer部署路径异常求助
问题分析与解决办法
兄弟,你这个问题的核心是Artifact Deployer插件并不支持直接通过HTTP URL来部署构件,它把你填的http://my.target.machine:8080/common/repos当成了本地文件路径的一部分,所以才会拼接到Jenkins服务器的本地目录(/opt/jenkins/)后面,变成了奇怪的/opt/jenkins/http:/my.target.machine:8080/common/repos,自然也就没法把文件传到目标地址了。
下面给你两种针对性的解决方案,你可以根据目标机器的实际情况选择:
情况1:目标地址是HTTP上传接口(需通过POST请求上传文件)
Artifact Deployer是为文件系统/SSH/FTP这类文件传输场景设计的,不支持HTTP接口上传。这种情况下你可以换两种方式:
- 用Shell命令直接调用:在Jenkins构建步骤里加一个「执行Shell」(Windows环境选「执行Windows批处理命令」),用
curl或者wget发送上传请求。举个例子,如果目标接口支持表单上传,命令大概是这样:
注意:这里的参数(比如curl -X POST -F "artifact=@*.properties" http://my.target.machine:8080/common/reposartifact)要和目标接口要求的字段名一致,如果有身份验证,还要加上对应的参数(比如-u username:password)。 - 用HTTP Request插件:安装Jenkins的HTTP Request插件,配置一个上传请求,指定要上传的
*.properties文件,以及目标HTTP地址、请求方法和必要的请求头/参数。
情况2:目标机器是可通过文件协议访问的服务器(如Linux/Windows服务器)
如果你的http://my.target.machine:8080/common/repos对应的是目标机器上的某个本地目录(比如Web服务器的静态文件目录),那你应该用文件传输协议来部署:
- SSH方式(推荐Linux服务器):在Artifact Deployer插件里选择「SSH」作为部署方式,先在Jenkins里配置好目标机器的SSH服务器信息(IP、端口、用户名密码/密钥),然后在「Remote file location」里填目标机器上的绝对本地路径(比如
/var/www/html/common/repos,而非HTTP URL)。 - SMB方式(Windows服务器):如果是Windows机器,用SMB共享路径,比如
\\my.target.machine\common\repos,配置好共享权限和Jenkins的访问权限后,Artifact Deployer就能直接把文件传过去。
最后提醒一下:不管用哪种方式,先手动测试一下上传流程(比如用curl命令在本地测试能不能传到目标地址),确认没问题再配置到Jenkins里,这样能更快排查问题。
内容的提问来源于stack exchange,提问作者Rajeev
相关产品推荐
相关产品推荐

