使用curl发布到Artifactory不工作

使用curl发布到Artifactory不工作,curl,publish,artifactory,Curl,Publish,Artifactory,我有一个(Gradle构建的)项目,它在/build/libs/myapp-.JAR生成一个JAR。我现在尝试编写一个curl命令,将JAR发布到Artifactory,如下所示: curl -i -X PUT -u myuser:12345@$ -T "build/libs/myapp-0.1.20.jar" "http://artifactory.example.com/libs-release-local/com/me/myapp/myapp/0.1.20/myapp-0.1.20.jar

我有一个(Gradle构建的)项目,它在
/build/libs/myapp-.JAR
生成一个JAR。我现在尝试编写一个
curl
命令,将JAR发布到Artifactory,如下所示:

curl -i -X PUT -u myuser:12345@$ -T "build/libs/myapp-0.1.20.jar" "http://artifactory.example.com/libs-release-local/com/me/myapp/myapp/0.1.20/myapp-0.1.20.jar"
当我在控制台中运行此命令时,我得到:

HTTP/1.1 100 Continue

HTTP/1.1 403 Forbidden
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 961
Date: Mon, 01 Jun 2015 15:07:42 GMT

<html><head><title>Apache Tomcat/7.0.56 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 403 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Access to the specified resource has been forbidden.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.56</h3></body></html>
HTTP/1.1 100是否继续
HTTP/1.1 403禁止
服务器:ApacheCoote/1.1
内容类型:text/html;字符集=utf-8
内容语言:英语
内容长度:961
日期:2015年6月1日星期一15:07:42 GMT
Apache Tomcat/7.0.56-错误报告HTTP Status 403-
类型状态报告

消息

已禁止对指定资源的描述访问。


Apache Tomcat/7.0.56

我已验证
myuser
是具有发布功能的有效人工用户(特别是对于
libs release local
),并且密码正确。我知道有一个artifactorygradle插件,但是由于这个问题范围之外的原因,我对它不感兴趣;我想使用
curl

来实现这一点,您得到的403响应是由Tomcat返回的,而不是Artifactory。 您可以通过查看服务器头值来确定这一点,服务器头值是
apachecoyote/1.1
,而不是
Artifactory/3.8.0
,响应上下文类型是
text/html
,而不是
application/json
(Artifactory使用json表示restapi错误消息)。
这通常表示您使用了错误的URL,可能缺少artifactorywebapp上下文。例如,部署到

http://localhost:8081/libs-release-local
而不是

http://localhost:8081/artifactory/libs-release-local
如果问题与Artifactory用户权限有关,您应该会收到类似的错误消息

{
  "errors" : [ {
    "status" : 403,
    "message" : "User myuser is not permitted to deploy 'com/me/myapp/myapp/0.1.20/myapp-0.1.20.jar' into 'libs-release-local:com/me/myapp/myapp/0.1.20/myapp-0.1.20.jar'."
  } ]
}

您是否能够使用同一用户从UI部署此文件?用户对libs release local repository具有什么时间的权限?谢谢@drorb(+1)-是
myuser
可以通过UI部署相同的工件,并且对
libs release local
具有写入/发布权限。您是否覆盖了现有工件?在这种情况下,您还需要删除权限。此外,您在Artifactory访问日志中看到了什么?再次感谢@drorb(+1)-是的,用户对repo具有删除权限。根据访问日志,我在哪里可以找到?它是可通过UI查看的还是Artifactory服务器上的文件(如果是,文件的名称+路径是什么)?再次感谢!日志可以在ARTIFACTORY\u HOME/Logs中找到,也可以在Admin>Advanced>System Logs中的UI中找到。你已经搞定了!在我的例子中,我没有使用curl,而是使用
jfrog
CLI工具。我错误地将目标路径传递为
/myapp.zip
而不是
artifactory//myapp.zip
,我注意到,
/artifactory//myapp.zip
似乎也能工作。