TFS 2015 Build vNext:cURL-FTP-Upload 错误或难以使用

Posted

技术标签:

【中文标题】TFS 2015 Build vNext:cURL-FTP-Upload 错误或难以使用【英文标题】:TFS 2015 Build vNext: cURL-FTP-Upload buggy or difficult to use 【发布时间】:2016-05-11 00:34:03 【问题描述】:

在我的 vNext-build-definition 中,我添加了一个新的构建步骤:“cURL Upload Files”。 玩了一会儿 URL 的语法和可选参数后,我终于完成它以到达正确目标文件夹中的我的 sftp 服务器 - 到目前为止连接正常。 但是当 cURL 尝试开始上传时,日志只会显示:

curl: Can't open 'my-Subfolder/Another Subfolder/myfile.txt'!
curl: try 'curl --help' or 'curl --manual' for more information
Unexpected exitcode 26 returned by tool curl.exe

“buggy”是指在构建步骤定义中选择文件的方式,无需用户提供任何帮助:尝试 1:我可以轻松地通过“...”选择文件-按钮 - 我可以浏览我的存储库的文件夹结构并选择一个文件。感觉很正常。然后将该文件夹写入文本框“文件”-但没有双引号,尽管它包含空格...这会出现错误,因为 cURL 预计不理解文件夹名称。尝试 2: 然后我自己添加了双引号,但仍然出现上述错误。尝试 3: 然后我尝试了语法**/myfile.txt 啊哈,这确实有效!!...但这会上传所有名为 myfile.txt 的文件夹中的所有文件(日志告诉我一些有趣的事情:curl 是通过使用另一种带大括号的语法调用的:“complete-path/to /我的/文件名") 以防万一 tfs-dev-team 中的某个人读到:另一个毫无意义的链接是步骤定义底部的“更多信息”。它导致了一个主题“部署:Azure PowerShell”——这与 FTP 上传无关,它的内容只是“这个主题还没有写出来..”:-(

所以,我现在有以下可能性1.使用语法**/filename(如果你能忍受所有文件的缺点将在 repo 的所有子文件夹中上传具有相同文件名的文件,因此最好保持文件名唯一!)2. 在之前使用另一个构建步骤并将文件复制或移动到根文件夹中存储库,以便仅在“文件”-TextBox 中使用文件名而没有路径信息。3. 忘记 cURL-build-steps:使用带有临时脚本的 WinSCP 并运行它使用批处理脚本步骤(http://winscp.net/eng/docs/guide_automation) :-)

(上面提到的带大括号的语法对我来说没用,因为它迫使我包含构建代理上的整个路径,我不能在我的 repo 中使用相对路径。)

有更好的想法吗?

【问题讨论】:

我在其他 VSO 代理任务中也遇到了一些问题。您应该在 vso-agent-tasks GitHub 页面上提交所有这些问题,以便 Microsoft 可以改进它们。 github.com/Microsoft/vso-agent-tasks/tree/master/Tasks/… 【参考方案1】:

我可以使用 TFS 2015 update1 + curl 7.47.0 重现您的场景:

    如果文件夹包含空格,如您的场景中的Another Subfolder,curl 无法识别它,我们将收到错误:curl: Can't open 'C:/agent/_work/xx/s/Another'!

    如果我们使用语法 **/myfile.txt,我们将获得工作区中名为 myfile.txt 的所有文件。

但是如果我们把文件放在名字不包含空格的文件夹下,就不会报错curl: Can't open 'C:/agent/_work/xx/s/Another'!,所以你可以考虑新建一个文件夹,比如AnotherSubfolder,把需要的文件放到复制到这个文件夹下,然后就可以使用整个路径了。

【讨论】:

我有一个类似的问题,我必须复制的文件包括一些名称中带有空格的文件夹。不幸的是,我无法重命名它们,因为它们位于 app.publish 文件夹中并包含 clickonce 部署文件。在这种情况下,如何让它发挥作用?

以上是关于TFS 2015 Build vNext:cURL-FTP-Upload 错误或难以使用的主要内容,如果未能解决你的问题,请参考以下文章

创建后无法在构建/部署定义 (vnext) 中选择 TFS 2015 机器组

TFS 2015 更新 3 Vnext 构建定义复制除父项目之外的所有工件

是否能够忽略/禁用 vNext Build 中的第一步获取源代码?

TFS 发布管理 vNext ReleaseManagementShare

为 TFS 发布管理 vNext 打包 DSC 配置

使用 vNext 构建后将内部版本号与 TFS 工作项相关联