【问题标题】:Download files from Artifactory to Teamcity without retaining their full path在不保留完整路径的情况下将文件从 Artifactory 下载到 Teamcity
【发布时间】:2017-07-18 10:56:59
【问题描述】:

我正在使用

  • TeamCity Enterprise 2017.1.2(内部版本 46812)
  • Artifactory Professional 5.3.1 rev 50046
  • Teamcity 已安装 Artifactory 插件(版本 2.3.0)

任务很简单 - 将文件从 Artifactory 下载到 Teamcity 构建:

  • 来自 Artifactory MyRepo/RootFolder/ProjectFolder/1.2.3/<files>
  • 致TC %checkoutdir%/artifacts/<files>

路径的<files> 部分包含文件夹和文件,我想保留它们的结构。

下载规范json为:

{
  "files": [
    {
      "pattern": "MyRepo/RootFolder/ProjectFolder/1.2.3/",
      "target": "artifacts/"
    }
  ]
}

但是,文件被下载到与我预期不同的位置:

  • 实际:artifacts/RootFolder/ProjectFolder/1.2.3/<files>
  • 预期:artifacts/<files>

Artifactory 的整个路径被附加到目标目录之后。如何告诉插件只使用指定根目录之后的文件的相对路径?我试过摆弄通配符、斜杠等,但没有任何帮助。

我必须创建一个额外的构建步骤,在其中手动将文件移动到我期望的结构,但我不想这样做。


有效答案:

{
  "files": [
    {
      "pattern": "MyRepo/RootFolder/ProjectFolder/1.2.3/(*)",
      "target": "artifacts/{1}",
      "flat": "true"
    }
  ]
}

【问题讨论】:

    标签: teamcity artifactory


    【解决方案1】:

    您可以通过在文件规范中使用占位符来自定义目标结构,如 here 所述。 占位符允许您捕获文件规范“模式”属性值的特定部分,并在“目标”属性值中使用它。

    在您的情况下,下载文件规范应如下所示:

    {
      "files": [
        {
          "pattern": "MyRepo/RootFolder/ProjectFolder/1.2.3/(*)",
          "target": "artifacts/{1}"
        }
      ]
    }
    

    【讨论】:

    • 我以前试过这个,但它没有按预期工作 - 假设我在 中有一个名为 util 的文件夹。您的文件规范会在下载时创建此结构:artifacts/util/RootFolder/ProjectFolder/1.2.3/util/<files-in-util> - 它只是将整个目录树放入由 (*) 匹配的文件夹中。更不用说这对文件没有任何不同。
    • 我明白了。因此,如果我对您的理解正确,您会想要 artifacts 目录下的文件的平面布局。我认为将 "flat": "true" 属性添加到您的原始文件规范应该可以为您解决问题。
    • 感谢您将我推向正确的方向。我之前尝试过flat,但没有(*),{1} 占位符。两者一起使用会产生我想要的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2012-07-04
    相关资源
    最近更新 更多