2017-07-18 50 views
0

我使用下载文件,而不保留其完整路径

  • TeamCity的企业2017年1月2日(建46812)
  • Artifactory的专业5.3.1修订版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的整个路径被附加到目标目录之后。我如何告诉插件只使用之后指定的根目录下的相对路径?我试图用通配符,斜杠等来摆弄,但没有任何帮助。

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


WORKING答:

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

回答

0

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

在你的情况下,下载文件的规格应该是这样的:

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

我尝试过这一点,但预期它不工作 - 让我们说我有一个文件夹中名为'util'。你的文件规范在下载时创建了这个结构:'artifacts/util/RootFolder/ProjectFolder/1.2.3/util/ - 它只是把整个目录树放到一个与(*)匹配的文件夹中。更何况这不会对文件做任何不同的事情。 –

+0

我明白了。所以,如果我正确理解你,你会喜欢文件目录下文件的平面布局。我认为将“flat”:“true”属性添加到您的原始文件规格中应该为您解决问题。 –

+0

谢谢你在正确的方向推动我。我之前尝试过'flat',但没有'(*),{1}'占位符。一起使用可以得到我想要的结果。 –