2013-02-20 80 views
1

我在TeamCity的一个构建配置中有一个名为“testing”的配置参数。在TeamCity的REST API文档here服用后一看,我能得到关于使用,下列curl命令行此参数的信息命令在Windows上:如何使用REST + cURL更新TeamCity构建参数

(1) curl -X GET -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters 
(2) curl -X GET -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing 

响应:

(1) <?xml version="1.0" encoding="UTF-8" standalone="yes"?><property name="testing" value="11"/></properties> 
(2) 11 

但后来,当我尝试更新此“测试”使用下面的命令来构建参数,我得到一个错误信息:

curl -X PUT -d "1" -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing 

响应:

Error has occurred during request processing (Unsupported Media Type). 
Error: javax.ws.rs.WebApplicationException 
Not supported request. Please check URL, HTTP method and transfered data are correct. 

我已经成功地使用了类似的命令来更新同一构建配置的buildNumberCounter设置:

curl -X PUT -d "1" -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/settings/buildNumberCounter 

这就是为什么我认为我可以做同样以类似的方式构建参数。我在这里错过了什么?

UPDATE:

我设法更新了 “测试” 建立与值 “1” 使用招参数。我组成的要求有以下内容:

  • 请求:PUT
  • 网址:http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing
  • 请求头:Authorization: Basic (...)
  • 请求正文:1

所以我卷曲问题上面的命令可能是围绕-d“1”选项的某处。但是哪里?

更新2:

我不知道是否有什么差别,但我用this卷曲建立在Windows 7

回答

0

我猜REST API期待XML作为输入,添加

-H "Content-type:text/xml" 

并将XML作为输入。如果你有一个XML文件file.xml

curl -d "@/path/to/file.xml" -H "Content-type:text/xml" (...) 
+1

我发现这个在TeamCity的REST API文档:'构建配置参数:GET /删除/ PUT HTTP://teamcity:8111/httpAuth/app/rest/buildTypes//parameters/(接受/生成文本/纯文本)'也看到我上面的更新,我设法更新参数与Fiddler没有手动设置内容类型转换为XML。 – remark 2013-02-20 14:53:00

+0

实际上,这个引用基本上是通过指定所需的内容类型来阐明的。你只需要把它放到标题中。请参阅下面的答案。 – 2013-09-04 14:19:20

2

而是固定失败的卷曲的命令,作为一种解决方法,我们现在用的Node.js撰写和发送REST请求的TeamCity。

需要提供给节点的脚本。exe文件如下:

// Equivalent cURL command: 
// curl -X PUT -d "1" -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing 

var http = require('http'), 
    options = { 
     hostname: 'teamcity', 
     port: 8080, 
     path: '/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing', 
     method: 'PUT', 
     headers: { 'Authorization': 'Basic (...)' } 
    }, 
    req; 

req = http.request(options, function(res) { }); 

// write data to request body 
req.write('1'); 
req.end(); 

尽管解决方法完美,但我仍然想知道上述cURL命令有什么问题吗?

1

对于那些非XML像你问的是一个参数,只需添加: --header“的Content-Type:text/plain的”

对于参数是XML,那么你会想切换到: - 头“内容类型:应用程序/ xml”

1

我也很难找出这一点,但我找到了答案。而不是在前面使用-d和-H。最后使用--data和--header,如下所示。我在埋在"click to expand" example中的TeamCity文档中发现了这一点。

集版本号柜台:

curl -v --basic --user <username>:<password> --request PUT http://<teamcity.url>/app/rest/buildTypes/<buildTypeLocator>/settings/buildNumberCounter --data <new number> --header "Content-Type: text/plain" 

集版本号格式为:

curl -v --basic --user <username>:<password> --request PUT http://<teamcity.url>/app/rest/buildTypes/<buildTypeLocator>/settings/buildNumberPattern --data <new format> --header "Content-Type: text/plain"