【问题标题】:Jenkins Pipeline - Upload to Artifactory: Failed to deploy file / Parent must be a folderJenkins Pipeline - 上传到 Artifactory:无法部署文件/父级必须是文件夹
【发布时间】:2018-08-10 12:54:23
【问题描述】:

我有一个 Jenkins 作业,它生成一个我想上传到 Artifactory 的 zip 文件。我在设置要上传的工件版本时遇到问题。

按照惯例,我使用时间戳有版本。我想上传文件到my/group/timestamp/file.zip。该文件的网址为http://ArtifactoryAdress/foo/my/group/timestamp/file.zip

这是我的管道代码

def serverArtifactory = Artifactory.server 'NameArtificatory'
def uploadSpec = """{
      "files": [
        {
          "pattern": "file.zip",
          "target": "my/group/${timestamp}/"
        }
     ]
    }"""
serverArtifactory.upload(uploadSpec)

我从 Jenkins Job 收到以下错误

java.lang.RuntimeException: java.io.IOException: 部署失败 文件。状态码:400 响应消息:Artifactory 返回了 以下错误: 父 my/group/timestampValue 必须是文件夹状态码:400

我查看了 buildInfo,但找不到如何设置版本。

顺便说一句,我也同意没有时间戳但只有组名的解决方案。

【问题讨论】:

  • 除了错误信息之外还有什么事情发生吗?这对我来说似乎是不言自明的。
  • 确保您没有在“my/group”模式下创建文件“timestampValue”。如果是这种情况,只需删除文件,一切都会正常。
  • 谢谢,我没有意识到文件已经存在(来自以前的测试)

标签: jenkins jenkins-pipeline artifactory


【解决方案1】:

最后,这个错误是清晰而简单的。

如前所述,路径为my/group/timestampValue 的文件已存在。您必须在 Artifactory 上将其删除。

【讨论】:

    【解决方案2】:

    别忘了,${} 的用法还是很不错的。我使用了下面的代码,它的工作

    def uploadSpec = """{
        "files": [
        {
        "pattern": "**/target/*.war",
        "target": "local-release/${APP_REPO}/${version.trim()}/${timestamp}.zip"
        }
        ]}"""
    server.upload(uploadSpec)
    

    @编辑。我只是想了一下。请打印您的${timestamp}。也许它包含带空格的字符,或者像 Artifactory 不允许在目录名称中使用的类似内容。尝试修剪你的timestamp.trim()

    【讨论】:

    • 我使用 ${} 但在我的问题中忘记了它。我编辑了。我和你看到的差异是目标和的“/”,但我仍然遇到同样的问题
    • 我必须编辑我的答案,它是针对多个文件的。对于单个文件,使用 *.zip 的路径
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2016-01-29
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多