将文件从Artifactory下载到Teamcity,而不保留其完整路径

将文件从Artifactory下载到Teamcity,而不保留其完整路径,teamcity,artifactory,Teamcity,Artifactory,我正在使用 TeamCity Enterprise 2017.1.2(构建46812) Artifactory Professional 5.3.1修订版50046 Teamcity安装了Artifactory插件(2.3.0版) 任务很简单-将文件从Artifactory下载到Teamcity build: 从ArtifactoryMyRepo/RootFolder/ProjectFolder/1.2.3/ 到TC%checkoutdir%/artifacts/ 路径的部分包含文件夹和

我正在使用

  • TeamCity Enterprise 2017.1.2(构建46812)
  • Artifactory Professional 5.3.1修订版50046
  • Teamcity安装了Artifactory插件(2.3.0版)
任务很简单-将文件从Artifactory下载到Teamcity build:

  • 从Artifactory
    MyRepo/RootFolder/ProjectFolder/1.2.3/
  • 到TC
    %checkoutdir%/artifacts/
路径的
部分包含文件夹和文件,我希望保留它们的结构

下载规范json为:

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

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

  • 实际:
    artifacts/RootFolder/ProjectFolder/1.2.3/
  • 预期:
    artifacts/
Artifactory的整个路径追加到目标目录之后。我如何告诉插件只使用指定根目录后文件的相对路径?我试过摆弄通配符、斜杠等,但都没用

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


工作答案:

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


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

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

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

我以前尝试过这个方法,但没有达到预期效果——假设我在
util
中有一个文件夹。您的文件规范在下载时创建了此结构:
artifacts/util/RootFolder/ProjectFolder/1.2.3/util/
-它只需将整个目录树放在(*)匹配的文件夹中。更不用说这对文件没有任何不同。我明白了。因此,如果我理解正确,您希望在artifacts目录下对文件进行平面布局。我认为将“flat”:“true”属性添加到原始文件规范中应该会对您有所帮助。感谢您为我指明了正确的方向。我以前尝试过使用
flat
,但是没有
(*),{1}
占位符。两者结合使用会产生我想要的结果。