Teamcity REST API在分支上获得最新的成功构建

时间:2013-09-05 20:40:08

标签: git rest teamcity

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

我可以使用此网址在分支上获取最新版本:http://$teamcity$/httpAuth/app/rest/buildTypes/name:$BuildTypeName$/builds/branch:name:$branchName$

但如果分支名称包含/(例如,git flow names分支feature/%release/%),则会失败。

我已尝试对/进行网址编码。例如,如果$branchName$> == 'release/branchName'我使用/builds/branch:name:release%2F$branchName$)

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

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

3 个答案:

答案 0 :(得分:6)

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

另一点,我没有亲自尝试过,可以在JetBrains的问题跟踪器的this comment找到:

  

我深入研究了一下,发现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

我不知道这是不是一种糟糕的安全措施。

答案 1 :(得分:3)

从8.0.3开始,这显然是bug in TeamCity

看起来它正在进行中。

答案 2 :(得分: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$