9

我使用 git flow 和 teamcity 作为我的 CI 服务器。我想从特定分支的最新成功构建中提取工件。

我可以使用这个 url 来获取分支上的最新版本:http://$teamcity$/httpAuth/app/rest/buildTypes/name:$BuildTypeName$/builds/branch:name:$branchName$

但如果分支名称包含/(例如,git 流程名称分支feature/%release/%),它会失败。

我试过 url 编码/. 例如,如果$branchName$> == 'release/branchName'我使用/builds/branch:name:release%2F$branchName$).

  • 作品 -/builds/branch:name:develop
  • 失败 - /builds/branch:name:release%2F$branchName$

我没有收到 API 错误,但 api 结果为空。

4

3 回答 3

7

您可以通过将构建定位器放入查询字符串而不是作为 URL 的路径元素的一部分来解决此问题,也就是说/builds/branch:name:release%2F1.0.1,您可以使用/builds?locator=branch:name:release%2F1.0.1. 返回的数据格式似乎不一样,但它确实包含内部构建 ID,因此您始终可以使用该 ID 再次请求该确切构建,例如/builds/id:3332.

在JetBrains 的问题跟踪器的评论中发现了另一点,我没有亲自尝试过:

我对此进行了深入研究,发现 Tomcat 6.0.10 及更高版本默认不再接受路径元素中的编码斜杠和反斜杠。可以通过更改两个 Tomcat 服务器属性(在http://tomcat.apache.org/security-6.html#Fixed_in_Apache_Tomcat_6.0.10上找到)来更改此行为:

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true

我不知道这是否被认为是一种不好的安全做法。

于 2015-02-25T14:28:26.470 回答
3

显然这是TeamCity 8.0.3中的一个错误

看起来它正在处理中。

于 2013-09-25T17:31:54.617 回答
0

如果没有 Keith 建议的修复,以下操作将失败:

http://$teamcity$/httpAuth/app/rest/buildTypes/name:$BuildTypeName$/builds/branch:name:$urlEncodedBranchName$

但以下将起作用,因为 Tomcat 确实允许在查询参数中使用转义斜杠:

http://$teamcity$/httpAuth/app/rest/buildTypes/name:$BuildTypeName$/builds?branch:name:$urlEncodedBranchName$
于 2019-01-31T16:21:22.360 回答